From ca48c2a04400c1577c11149ae4e18c3bfa2330f1 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 15:45:28 -0700 Subject: [PATCH 1/8] feat(LFXV2-2405): add committee_name to committee invite Snapshot the committee name onto the invite at creation time so that invitees can see which committee they were invited to without needing read access to the committee itself (relevant for private committees). - Add CommitteeName field to CommitteeInvite domain model - Set CommitteeName from committeeBase.Name on create and reinstate paths - Expose committee_name in the Goa API type and regenerate gen/ - Wire through the response converter - Index the field via the existing data payload (flat_object in OS) - Update docs/indexer-contract.md with the new field Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- cmd/committee-api/design/type.go | 3 ++ .../service/committee_service.go | 14 +++--- .../service/committee_service_response.go | 3 ++ docs/indexer-contract.md | 1 + gen/committee_service/service.go | 2 + gen/http/cli/committee/cli.go | 2 +- gen/http/committee_service/client/cli.go | 7 +-- gen/http/committee_service/client/types.go | 41 ++++++++++------- gen/http/committee_service/server/types.go | 45 +++++++++++-------- gen/http/openapi.json | 2 +- gen/http/openapi.yaml | 7 ++- gen/http/openapi3.json | 2 +- gen/http/openapi3.yaml | 10 ++++- internal/domain/model/committee_invite.go | 15 ++++--- 14 files changed, 96 insertions(+), 58 deletions(-) diff --git a/cmd/committee-api/design/type.go b/cmd/committee-api/design/type.go index fae6eba2..1cdf085a 100644 --- a/cmd/committee-api/design/type.go +++ b/cmd/committee-api/design/type.go @@ -892,6 +892,9 @@ var CommitteeInviteWithReadonlyAttributes = dsl.Type("committee-invite-with-read dsl.Example("7cad5a8d-19d0-41a4-81a6-043453daf9ee") dsl.Format(dsl.FormatUUID) }) + dsl.Attribute("committee_name", dsl.String, "Name of the committee at the time the invite was created", func() { + dsl.Example("Technical Steering Committee") + }) dsl.Attribute("invitee_email", dsl.String, "Email of the invited person", func() { dsl.Format(dsl.FormatEmail) dsl.Example("invitee@example.com") diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 81eb87f5..5f2fc7b6 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -666,12 +666,13 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser inviteOrganization := organizationPtrFromFields(inviteOrgID, inviteOrgName, inviteOrgWebsite) invite := &model.CommitteeInvite{ - UID: uuid.New().String(), - CommitteeUID: p.UID, - InviteeEmail: p.InviteeEmail, - Organization: inviteOrganization, - Status: "pending", - CreatedAt: time.Now().UTC(), + UID: uuid.New().String(), + CommitteeUID: p.UID, + CommitteeName: committeeBase.Name, + InviteeEmail: p.InviteeEmail, + Organization: inviteOrganization, + Status: "pending", + CreatedAt: time.Now().UTC(), } if p.Role != nil { invite.Role = *p.Role @@ -707,6 +708,7 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser return nil, wrapError(ctx, errGet) } revokedInvite.Status = "pending" + revokedInvite.CommitteeName = committeeBase.Name if p.Role != nil { revokedInvite.Role = *p.Role } diff --git a/cmd/committee-api/service/committee_service_response.go b/cmd/committee-api/service/committee_service_response.go index 4fa0ebe3..7acad5e6 100644 --- a/cmd/committee-api/service/committee_service_response.go +++ b/cmd/committee-api/service/committee_service_response.go @@ -634,6 +634,9 @@ func (s *committeeServicesrvc) convertInviteDomainToResponse(invite *model.Commi InviteeEmail: &invite.InviteeEmail, Status: invite.Status, } + if invite.CommitteeName != "" { + result.CommitteeName = &invite.CommitteeName + } if invite.Role != "" { result.Role = &invite.Role } diff --git a/docs/indexer-contract.md b/docs/indexer-contract.md index 7ea4001e..f8bcad81 100644 --- a/docs/indexer-contract.md +++ b/docs/indexer-contract.md @@ -329,6 +329,7 @@ _(none)_ |---|---|---| | `uid` | string | Invite unique identifier | | `committee_uid` | string | UID of the committee this invite belongs to | +| `committee_name` | string | Name of the committee at the time the invite was created | | `invitee_email` | string | Email address of the invitee | | `role` | string | Role the invitee is being invited to | | `organization` | object | Organization for the invitee (`id`, `name`, `website`) when provided on create | diff --git a/gen/committee_service/service.go b/gen/committee_service/service.go index f25f752a..62117ed8 100644 --- a/gen/committee_service/service.go +++ b/gen/committee_service/service.go @@ -361,6 +361,8 @@ type CommitteeInviteWithReadonlyAttributes struct { UID *string // Committee UID CommitteeUID *string + // Name of the committee at the time the invite was created + CommitteeName *string // Email of the invited person InviteeEmail *string // Suggested role for the invitee diff --git a/gen/http/cli/committee/cli.go b/gen/http/cli/committee/cli.go index 5e51df35..5d6eb460 100644 --- a/gen/http/cli/committee/cli.go +++ b/gen/http/cli/committee/cli.go @@ -156,7 +156,7 @@ func ParseEndpoint( committeeServiceRevokeInviteBearerTokenFlag = committeeServiceRevokeInviteFlags.String("bearer-token", "", "") committeeServiceAcceptInviteFlags = flag.NewFlagSet("accept-invite", flag.ExitOnError) - committeeServiceAcceptInviteBodyFlag = committeeServiceAcceptInviteFlags.String("body", "{}", "") + committeeServiceAcceptInviteBodyFlag = committeeServiceAcceptInviteFlags.String("body", "REQUIRED", "") committeeServiceAcceptInviteUIDFlag = committeeServiceAcceptInviteFlags.String("uid", "REQUIRED", "Committee UID -- v2 uid, not related to v1 id directly") committeeServiceAcceptInviteInviteUIDFlag = committeeServiceAcceptInviteFlags.String("invite-uid", "REQUIRED", "Committee invite UID") committeeServiceAcceptInviteVersionFlag = committeeServiceAcceptInviteFlags.String("version", "REQUIRED", "") diff --git a/gen/http/committee_service/client/cli.go b/gen/http/committee_service/client/cli.go index 04b2fa90..3083b308 100644 --- a/gen/http/committee_service/client/cli.go +++ b/gen/http/committee_service/client/cli.go @@ -12,7 +12,6 @@ import ( "encoding/json" "fmt" "strconv" - "strings" "unicode/utf8" committeeservice "github.com/linuxfoundation/lfx-v2-committee-service/gen/committee_service" @@ -1446,11 +1445,7 @@ func BuildAcceptInvitePayload(committeeServiceAcceptInviteBody string, committee var err error var body AcceptInviteRequestBody { - bodyJSON := strings.TrimSpace(committeeServiceAcceptInviteBody) - if bodyJSON == "" || bodyJSON == "REQUIRED" { - bodyJSON = "{}" - } - err = json.Unmarshal([]byte(bodyJSON), &body) + err = json.Unmarshal([]byte(committeeServiceAcceptInviteBody), &body) if err != nil { return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "'{\n \"organization\": {\n \"id\": \"org-123456\",\n \"name\": \"The Linux Foundation\",\n \"website\": \"https://linuxfoundation.org\"\n }\n }'") } diff --git a/gen/http/committee_service/client/types.go b/gen/http/committee_service/client/types.go index a83cb35e..03ea901d 100644 --- a/gen/http/committee_service/client/types.go +++ b/gen/http/committee_service/client/types.go @@ -679,6 +679,8 @@ type GetInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -705,6 +707,8 @@ type CreateInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -791,6 +795,8 @@ type DeclineInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -3297,7 +3303,7 @@ func NewCreateInviteRequestBody(p *committeeservice.CreateInvitePayload) *Create // the "accept-invite" endpoint of the "committee-service" service. func NewAcceptInviteRequestBody(p *committeeservice.AcceptInvitePayload) *AcceptInviteRequestBody { body := &AcceptInviteRequestBody{} - if p.Body != nil && p.Body.Organization != nil { + if p.Body.Organization != nil { body.Organization = &struct { // Organization ID ID *string `form:"id" json:"id" xml:"id"` @@ -4608,11 +4614,12 @@ func NewDeleteCommitteeMemberServiceUnavailable(body *DeleteCommitteeMemberServi // response. func NewGetInviteCommitteeInviteWithReadonlyAttributesOK(body *GetInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status @@ -4673,11 +4680,12 @@ func NewGetInviteServiceUnavailable(body *GetInviteServiceUnavailableResponseBod // "Created" response. func NewCreateInviteCommitteeInviteWithReadonlyAttributesCreated(body *CreateInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status @@ -4944,11 +4952,12 @@ func NewAcceptInviteServiceUnavailable(body *AcceptInviteServiceUnavailableRespo // "OK" response. func NewDeclineInviteCommitteeInviteWithReadonlyAttributesOK(body *DeclineInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status diff --git a/gen/http/committee_service/server/types.go b/gen/http/committee_service/server/types.go index 15e6135b..54704a69 100644 --- a/gen/http/committee_service/server/types.go +++ b/gen/http/committee_service/server/types.go @@ -679,6 +679,8 @@ type GetInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -705,6 +707,8 @@ type CreateInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -791,6 +795,8 @@ type DeclineInviteResponseBody struct { UID *string `form:"uid,omitempty" json:"uid,omitempty" xml:"uid,omitempty"` // Committee UID CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` + // Name of the committee at the time the invite was created + CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -3562,12 +3568,13 @@ func NewUpdateCommitteeMemberResponseBody(res *committeeservice.CommitteeMemberF // the "get-invite" endpoint of the "committee-service" service. func NewGetInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *GetInviteResponseBody { body := &GetInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { @@ -3596,12 +3603,13 @@ func NewGetInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyA // the "create-invite" endpoint of the "committee-service" service. func NewCreateInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *CreateInviteResponseBody { body := &CreateInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { @@ -3718,12 +3726,13 @@ func NewAcceptInviteResponseBody(res *committeeservice.CommitteeMemberFullWithRe // of the "decline-invite" endpoint of the "committee-service" service. func NewDeclineInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *DeclineInviteResponseBody { body := &DeclineInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { diff --git a/gen/http/openapi.json b/gen/http/openapi.json index bdea7a14..c8f15e2b 100644 --- a/gen/http/openapi.json +++ b/gen/http/openapi.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":false,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file +{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":true,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file diff --git a/gen/http/openapi.yaml b/gen/http/openapi.yaml index bbd2d7ad..6da778ae 100644 --- a/gen/http/openapi.yaml +++ b/gen/http/openapi.yaml @@ -1377,7 +1377,7 @@ paths: - name: Accept-InviteRequestBody in: body description: Optional JSON body - required: false + required: true schema: $ref: '#/definitions/AcceptInviteOptionalBody' responses: @@ -3334,6 +3334,10 @@ definitions: title: CommitteeInviteWithReadonlyAttributes type: object properties: + committee_name: + type: string + description: Name of the committee at the time the invite was created + example: Technical Steering Committee committee_uid: type: string description: Committee UID @@ -3391,6 +3395,7 @@ definitions: example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 format: uuid example: + committee_name: Technical Steering Committee committee_uid: 7cad5a8d-19d0-41a4-81a6-043453daf9ee created_at: "2023-01-15T10:30:00Z" invitee_email: invitee@example.com diff --git a/gen/http/openapi3.json b/gen/http/openapi3.json index 1bf0d83d..5d2cdc4c 100644 --- a/gen/http/openapi3.json +++ b/gen/http/openapi3.json @@ -1 +1 @@ -{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file +{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file diff --git a/gen/http/openapi3.yaml b/gen/http/openapi3.yaml index 906335a1..346f46bb 100644 --- a/gen/http/openapi3.yaml +++ b/gen/http/openapi3.yaml @@ -1764,6 +1764,7 @@ paths: schema: $ref: '#/components/schemas/CommitteeInviteWithReadonlyAttributes' example: + committee_name: Technical Steering Committee committee_uid: 7cad5a8d-19d0-41a4-81a6-043453daf9ee created_at: "2023-01-15T10:30:00Z" invitee_email: invitee@example.com @@ -1940,6 +1941,7 @@ paths: schema: $ref: '#/components/schemas/CommitteeInviteWithReadonlyAttributes' example: + committee_name: Technical Steering Committee committee_uid: 7cad5a8d-19d0-41a4-81a6-043453daf9ee created_at: "2023-01-15T10:30:00Z" invitee_email: invitee@example.com @@ -2018,7 +2020,7 @@ paths: example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 requestBody: description: Optional JSON body - required: false + required: true content: application/json: schema: @@ -2160,6 +2162,7 @@ paths: schema: $ref: '#/components/schemas/CommitteeInviteWithReadonlyAttributes' example: + committee_name: Technical Steering Committee committee_uid: 7cad5a8d-19d0-41a4-81a6-043453daf9ee created_at: "2023-01-15T10:30:00Z" invitee_email: invitee@example.com @@ -5138,6 +5141,10 @@ components: CommitteeInviteWithReadonlyAttributes: type: object properties: + committee_name: + type: string + description: Name of the committee at the time the invite was created + example: Technical Steering Committee committee_uid: type: string description: Committee UID @@ -5196,6 +5203,7 @@ components: format: uuid description: A representation of a committee invite with readonly attributes. example: + committee_name: Technical Steering Committee committee_uid: 7cad5a8d-19d0-41a4-81a6-043453daf9ee created_at: "2023-01-15T10:30:00Z" invitee_email: invitee@example.com diff --git a/internal/domain/model/committee_invite.go b/internal/domain/model/committee_invite.go index 00946d6e..d630ade0 100644 --- a/internal/domain/model/committee_invite.go +++ b/internal/domain/model/committee_invite.go @@ -17,13 +17,14 @@ import ( // CommitteeInvite represents a committee invitation business entity type CommitteeInvite struct { - UID string `json:"uid"` - CommitteeUID string `json:"committee_uid"` - InviteeEmail string `json:"invitee_email"` - Role string `json:"role"` - Organization *CommitteeMemberOrganization `json:"organization,omitempty"` - Status string `json:"status"` - CreatedAt time.Time `json:"created_at"` + UID string `json:"uid"` + CommitteeUID string `json:"committee_uid"` + CommitteeName string `json:"committee_name,omitempty"` + InviteeEmail string `json:"invitee_email"` + Role string `json:"role"` + Organization *CommitteeMemberOrganization `json:"organization,omitempty"` + Status string `json:"status"` + CreatedAt time.Time `json:"created_at"` } // BuildIndexKey generates a SHA-256 hash for use as a NATS KV key. From 6b1d28f23731fa5fbfd60b29d7cf88031c3ca58a Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 15:53:52 -0700 Subject: [PATCH 2/8] fix(LFXV2-2405): lazy-backfill committee_name on invite read and mutations Pre-existing invites stored in NATS before committee_name was added will have an empty field. Populate it on-the-fly from the committee record whenever an invite without committee_name is read (GetInvite) or mutated (Accept, Decline, Revoke). Mutations persist the backfilled value and re-publish to OpenSearch so the index gradually self-heals without a one-time migration job. Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- .../service/committee_service.go | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 5f2fc7b6..8acbf942 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -641,6 +641,13 @@ func (s *committeeServicesrvc) GetInvite(ctx context.Context, p *committeeservic return nil, wrapError(ctx, errors.NewNotFound("invite not found in this committee")) } + // Lazy backfill for invites created before committee_name was added to the model. + if invite.CommitteeName == "" { + if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { + invite.CommitteeName = cb.Name + } + } + return s.convertInviteDomainToResponse(invite), nil } @@ -857,6 +864,12 @@ func (s *committeeServicesrvc) RevokeInvite(ctx context.Context, p *committeeser } invite.Status = "revoked" + // Lazy backfill for invites created before committee_name was added to the model. + if invite.CommitteeName == "" { + if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { + invite.CommitteeName = cb.Name + } + } if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return wrapError(ctx, err) } @@ -925,6 +938,12 @@ func (s *committeeServicesrvc) AcceptInvite(ctx context.Context, p *committeeser // Member created successfully — now mark the invite accepted. invite.Status = "accepted" + // Lazy backfill for invites created before committee_name was added to the model. + if invite.CommitteeName == "" { + if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { + invite.CommitteeName = cb.Name + } + } if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return nil, wrapError(ctx, err) } @@ -968,6 +987,12 @@ func (s *committeeServicesrvc) DeclineInvite(ctx context.Context, p *committeese } invite.Status = "declined" + // Lazy backfill for invites created before committee_name was added to the model. + if invite.CommitteeName == "" { + if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { + invite.CommitteeName = cb.Name + } + } if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return nil, wrapError(ctx, err) } From 447c4956c0565d1b053297ead4db6288aae77499 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 16:05:34 -0700 Subject: [PATCH 3/8] feat(LFXV2-2405): add organization_required to committee invite Computes organization_required from the committee's current settings at invite creation time (voting enabled || business_email_required), matching the same rule used by validateOrganizationFields when creating a member. The UI uses this field to decide whether to prompt the invitee for an organization when accepting the invite. - Add OrganizationRequired bool to CommitteeInvite domain model - Fetch committee settings alongside base in CreateInvite to compute it - Expose organization_required in the Goa API type and regenerate gen/ - Wire through the response converter - Refactor four per-endpoint lazy-backfill blocks into a single enrichInviteFromCommittee helper that also refreshes OrganizationRequired (GetInvite, AcceptInvite, DeclineInvite, RevokeInvite each call GetBase and GetSettings only once via the helper; CreateInvite reuses its already- fetched values and does not call the helper) - Update docs/indexer-contract.md with the new field Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- cmd/committee-api/design/type.go | 3 + .../service/committee_service.go | 66 ++++++++++--------- .../service/committee_service_response.go | 1 + docs/indexer-contract.md | 1 + gen/committee_service/service.go | 3 + gen/http/committee_service/client/types.go | 48 +++++++++----- gen/http/committee_service/server/types.go | 54 +++++++++------ gen/http/openapi.json | 2 +- gen/http/openapi.yaml | 5 ++ gen/http/openapi3.json | 2 +- gen/http/openapi3.yaml | 8 +++ internal/domain/model/committee_invite.go | 17 ++--- 12 files changed, 130 insertions(+), 80 deletions(-) diff --git a/cmd/committee-api/design/type.go b/cmd/committee-api/design/type.go index 1cdf085a..b24ba860 100644 --- a/cmd/committee-api/design/type.go +++ b/cmd/committee-api/design/type.go @@ -895,6 +895,9 @@ var CommitteeInviteWithReadonlyAttributes = dsl.Type("committee-invite-with-read dsl.Attribute("committee_name", dsl.String, "Name of the committee at the time the invite was created", func() { dsl.Example("Technical Steering Committee") }) + dsl.Attribute("organization_required", dsl.Boolean, "Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.", func() { + dsl.Example(false) + }) dsl.Attribute("invitee_email", dsl.String, "Email of the invited person", func() { dsl.Format(dsl.FormatEmail) dsl.Example("invitee@example.com") diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 8acbf942..65e319cf 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -641,12 +641,7 @@ func (s *committeeServicesrvc) GetInvite(ctx context.Context, p *committeeservic return nil, wrapError(ctx, errors.NewNotFound("invite not found in this committee")) } - // Lazy backfill for invites created before committee_name was added to the model. - if invite.CommitteeName == "" { - if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { - invite.CommitteeName = cb.Name - } - } + s.enrichInviteFromCommittee(ctx, invite, p.UID) return s.convertInviteDomainToResponse(invite), nil } @@ -664,6 +659,10 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser return nil, wrapError(ctx, err) } + // Best-effort: settings drive organization_required; missing settings means false. + committeeSettings, _, _ := s.storage.GetSettings(ctx, p.UID) + orgRequired := committeeBase.EnableVoting || (committeeSettings != nil && committeeSettings.BusinessEmailRequired) + var inviteOrgID, inviteOrgName, inviteOrgWebsite *string if p.Organization != nil { inviteOrgID = p.Organization.ID @@ -673,13 +672,14 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser inviteOrganization := organizationPtrFromFields(inviteOrgID, inviteOrgName, inviteOrgWebsite) invite := &model.CommitteeInvite{ - UID: uuid.New().String(), - CommitteeUID: p.UID, - CommitteeName: committeeBase.Name, - InviteeEmail: p.InviteeEmail, - Organization: inviteOrganization, - Status: "pending", - CreatedAt: time.Now().UTC(), + UID: uuid.New().String(), + CommitteeUID: p.UID, + CommitteeName: committeeBase.Name, + OrganizationRequired: orgRequired, + InviteeEmail: p.InviteeEmail, + Organization: inviteOrganization, + Status: "pending", + CreatedAt: time.Now().UTC(), } if p.Role != nil { invite.Role = *p.Role @@ -716,6 +716,7 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser } revokedInvite.Status = "pending" revokedInvite.CommitteeName = committeeBase.Name + revokedInvite.OrganizationRequired = orgRequired if p.Role != nil { revokedInvite.Role = *p.Role } @@ -864,12 +865,7 @@ func (s *committeeServicesrvc) RevokeInvite(ctx context.Context, p *committeeser } invite.Status = "revoked" - // Lazy backfill for invites created before committee_name was added to the model. - if invite.CommitteeName == "" { - if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { - invite.CommitteeName = cb.Name - } - } + s.enrichInviteFromCommittee(ctx, invite, p.UID) if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return wrapError(ctx, err) } @@ -938,12 +934,7 @@ func (s *committeeServicesrvc) AcceptInvite(ctx context.Context, p *committeeser // Member created successfully — now mark the invite accepted. invite.Status = "accepted" - // Lazy backfill for invites created before committee_name was added to the model. - if invite.CommitteeName == "" { - if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { - invite.CommitteeName = cb.Name - } - } + s.enrichInviteFromCommittee(ctx, invite, p.UID) if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return nil, wrapError(ctx, err) } @@ -987,12 +978,7 @@ func (s *committeeServicesrvc) DeclineInvite(ctx context.Context, p *committeese } invite.Status = "declined" - // Lazy backfill for invites created before committee_name was added to the model. - if invite.CommitteeName == "" { - if cb, _, cbErr := s.storage.GetBase(ctx, p.UID); cbErr == nil { - invite.CommitteeName = cb.Name - } - } + s.enrichInviteFromCommittee(ctx, invite, p.UID) if err := s.storage.UpdateInvite(ctx, invite, rev); err != nil { return nil, wrapError(ctx, err) } @@ -1338,6 +1324,24 @@ func (s *committeeServicesrvc) resolveCallerEmail(ctx context.Context) (string, return userEmails.PrimaryEmail, nil } +// enrichInviteFromCommittee populates invite fields derived from the committee. +// It sets CommitteeName when missing and always refreshes OrganizationRequired from +// the committee's current settings (voting enabled or business email required). +// Best-effort: errors are logged and the invite is left unchanged on failure. +func (s *committeeServicesrvc) enrichInviteFromCommittee(ctx context.Context, invite *model.CommitteeInvite, committeeUID string) { + cb, _, err := s.storage.GetBase(ctx, committeeUID) + if err != nil { + slog.WarnContext(ctx, "enrichInviteFromCommittee: failed to get committee base", + "committee_uid", committeeUID, "error", err) + return + } + if invite.CommitteeName == "" { + invite.CommitteeName = cb.Name + } + settings, _, _ := s.storage.GetSettings(ctx, committeeUID) + invite.OrganizationRequired = cb.EnableVoting || (settings != nil && settings.BusinessEmailRequired) +} + // publishInviteIndexerMessage publishes an indexer message for invite operations. // Publishing is best-effort: failures are logged but do not fail the request. // IndexingConfig is required because the indexer is data-agnostic; publishers supply all indexing metadata. diff --git a/cmd/committee-api/service/committee_service_response.go b/cmd/committee-api/service/committee_service_response.go index 7acad5e6..bf25a639 100644 --- a/cmd/committee-api/service/committee_service_response.go +++ b/cmd/committee-api/service/committee_service_response.go @@ -637,6 +637,7 @@ func (s *committeeServicesrvc) convertInviteDomainToResponse(invite *model.Commi if invite.CommitteeName != "" { result.CommitteeName = &invite.CommitteeName } + result.OrganizationRequired = &invite.OrganizationRequired if invite.Role != "" { result.Role = &invite.Role } diff --git a/docs/indexer-contract.md b/docs/indexer-contract.md index f8bcad81..97762ab7 100644 --- a/docs/indexer-contract.md +++ b/docs/indexer-contract.md @@ -330,6 +330,7 @@ _(none)_ | `uid` | string | Invite unique identifier | | `committee_uid` | string | UID of the committee this invite belongs to | | `committee_name` | string | Name of the committee at the time the invite was created | +| `organization_required` | boolean | True when the committee has voting enabled or requires a business email; the UI uses this to decide whether to prompt for an organization on accept | | `invitee_email` | string | Email address of the invitee | | `role` | string | Role the invitee is being invited to | | `organization` | object | Organization for the invitee (`id`, `name`, `website`) when provided on create | diff --git a/gen/committee_service/service.go b/gen/committee_service/service.go index 62117ed8..8106df41 100644 --- a/gen/committee_service/service.go +++ b/gen/committee_service/service.go @@ -363,6 +363,9 @@ type CommitteeInviteWithReadonlyAttributes struct { CommitteeUID *string // Name of the committee at the time the invite was created CommitteeName *string + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool // Email of the invited person InviteeEmail *string // Suggested role for the invitee diff --git a/gen/http/committee_service/client/types.go b/gen/http/committee_service/client/types.go index 03ea901d..268a8198 100644 --- a/gen/http/committee_service/client/types.go +++ b/gen/http/committee_service/client/types.go @@ -681,6 +681,9 @@ type GetInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -709,6 +712,9 @@ type CreateInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -797,6 +803,9 @@ type DeclineInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -4614,12 +4623,13 @@ func NewDeleteCommitteeMemberServiceUnavailable(body *DeleteCommitteeMemberServi // response. func NewGetInviteCommitteeInviteWithReadonlyAttributesOK(body *GetInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - CommitteeName: body.CommitteeName, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + OrganizationRequired: body.OrganizationRequired, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status @@ -4680,12 +4690,13 @@ func NewGetInviteServiceUnavailable(body *GetInviteServiceUnavailableResponseBod // "Created" response. func NewCreateInviteCommitteeInviteWithReadonlyAttributesCreated(body *CreateInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - CommitteeName: body.CommitteeName, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + OrganizationRequired: body.OrganizationRequired, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status @@ -4952,12 +4963,13 @@ func NewAcceptInviteServiceUnavailable(body *AcceptInviteServiceUnavailableRespo // "OK" response. func NewDeclineInviteCommitteeInviteWithReadonlyAttributesOK(body *DeclineInviteResponseBody) *committeeservice.CommitteeInviteWithReadonlyAttributes { v := &committeeservice.CommitteeInviteWithReadonlyAttributes{ - UID: body.UID, - CommitteeUID: body.CommitteeUID, - CommitteeName: body.CommitteeName, - InviteeEmail: body.InviteeEmail, - Role: body.Role, - CreatedAt: body.CreatedAt, + UID: body.UID, + CommitteeUID: body.CommitteeUID, + CommitteeName: body.CommitteeName, + OrganizationRequired: body.OrganizationRequired, + InviteeEmail: body.InviteeEmail, + Role: body.Role, + CreatedAt: body.CreatedAt, } if body.Status != nil { v.Status = *body.Status diff --git a/gen/http/committee_service/server/types.go b/gen/http/committee_service/server/types.go index 54704a69..6eb9e3d1 100644 --- a/gen/http/committee_service/server/types.go +++ b/gen/http/committee_service/server/types.go @@ -681,6 +681,9 @@ type GetInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -709,6 +712,9 @@ type CreateInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -797,6 +803,9 @@ type DeclineInviteResponseBody struct { CommitteeUID *string `form:"committee_uid,omitempty" json:"committee_uid,omitempty" xml:"committee_uid,omitempty"` // Name of the committee at the time the invite was created CommitteeName *string `form:"committee_name,omitempty" json:"committee_name,omitempty" xml:"committee_name,omitempty"` + // Whether the invitee must supply an organization when accepting. True when + // the committee has voting enabled or requires a business email. + OrganizationRequired *bool `form:"organization_required,omitempty" json:"organization_required,omitempty" xml:"organization_required,omitempty"` // Email of the invited person InviteeEmail *string `form:"invitee_email,omitempty" json:"invitee_email,omitempty" xml:"invitee_email,omitempty"` // Suggested role for the invitee @@ -3568,13 +3577,14 @@ func NewUpdateCommitteeMemberResponseBody(res *committeeservice.CommitteeMemberF // the "get-invite" endpoint of the "committee-service" service. func NewGetInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *GetInviteResponseBody { body := &GetInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - CommitteeName: res.CommitteeName, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + OrganizationRequired: res.OrganizationRequired, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { @@ -3603,13 +3613,14 @@ func NewGetInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyA // the "create-invite" endpoint of the "committee-service" service. func NewCreateInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *CreateInviteResponseBody { body := &CreateInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - CommitteeName: res.CommitteeName, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + OrganizationRequired: res.OrganizationRequired, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { @@ -3726,13 +3737,14 @@ func NewAcceptInviteResponseBody(res *committeeservice.CommitteeMemberFullWithRe // of the "decline-invite" endpoint of the "committee-service" service. func NewDeclineInviteResponseBody(res *committeeservice.CommitteeInviteWithReadonlyAttributes) *DeclineInviteResponseBody { body := &DeclineInviteResponseBody{ - UID: res.UID, - CommitteeUID: res.CommitteeUID, - CommitteeName: res.CommitteeName, - InviteeEmail: res.InviteeEmail, - Role: res.Role, - Status: res.Status, - CreatedAt: res.CreatedAt, + UID: res.UID, + CommitteeUID: res.CommitteeUID, + CommitteeName: res.CommitteeName, + OrganizationRequired: res.OrganizationRequired, + InviteeEmail: res.InviteeEmail, + Role: res.Role, + Status: res.Status, + CreatedAt: res.CreatedAt, } if res.Organization != nil { body.Organization = &struct { diff --git a/gen/http/openapi.json b/gen/http/openapi.json index c8f15e2b..70e94bd9 100644 --- a/gen/http/openapi.json +++ b/gen/http/openapi.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":true,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file +{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":true,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file diff --git a/gen/http/openapi.yaml b/gen/http/openapi.yaml index 6da778ae..d6f62c93 100644 --- a/gen/http/openapi.yaml +++ b/gen/http/openapi.yaml @@ -3375,6 +3375,10 @@ definitions: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: + type: boolean + description: Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email. + example: false role: type: string description: Suggested role for the invitee @@ -3403,6 +3407,7 @@ definitions: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: false role: None status: pending uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 diff --git a/gen/http/openapi3.json b/gen/http/openapi3.json index 5d2cdc4c..2abdd53e 100644 --- a/gen/http/openapi3.json +++ b/gen/http/openapi3.json @@ -1 +1 @@ -{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file +{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file diff --git a/gen/http/openapi3.yaml b/gen/http/openapi3.yaml index 346f46bb..9d0f6b5f 100644 --- a/gen/http/openapi3.yaml +++ b/gen/http/openapi3.yaml @@ -1772,6 +1772,7 @@ paths: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: false role: None status: pending uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 @@ -1949,6 +1950,7 @@ paths: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: false role: None status: pending uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 @@ -2170,6 +2172,7 @@ paths: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: false role: None status: pending uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 @@ -5182,6 +5185,10 @@ components: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: + type: boolean + description: Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email. + example: false role: type: string description: Suggested role for the invitee @@ -5211,6 +5218,7 @@ components: id: org-123456 name: The Linux Foundation website: https://linuxfoundation.org + organization_required: false role: None status: pending uid: a1b2c3d4-e5f6-7890-abcd-ef1234567890 diff --git a/internal/domain/model/committee_invite.go b/internal/domain/model/committee_invite.go index d630ade0..461f5dd0 100644 --- a/internal/domain/model/committee_invite.go +++ b/internal/domain/model/committee_invite.go @@ -17,14 +17,15 @@ import ( // CommitteeInvite represents a committee invitation business entity type CommitteeInvite struct { - UID string `json:"uid"` - CommitteeUID string `json:"committee_uid"` - CommitteeName string `json:"committee_name,omitempty"` - InviteeEmail string `json:"invitee_email"` - Role string `json:"role"` - Organization *CommitteeMemberOrganization `json:"organization,omitempty"` - Status string `json:"status"` - CreatedAt time.Time `json:"created_at"` + UID string `json:"uid"` + CommitteeUID string `json:"committee_uid"` + CommitteeName string `json:"committee_name,omitempty"` + OrganizationRequired bool `json:"organization_required"` + InviteeEmail string `json:"invitee_email"` + Role string `json:"role"` + Organization *CommitteeMemberOrganization `json:"organization,omitempty"` + Status string `json:"status"` + CreatedAt time.Time `json:"created_at"` } // BuildIndexKey generates a SHA-256 hash for use as a NATS KV key. From 4862418a00267288d599975260fb1aac2cf3df85 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 16:23:30 -0700 Subject: [PATCH 4/8] fix(LFXV2-2453): backfill committee_name and organization_required in reindex-invites The reindex-invites CLI command now populates committee_name and organization_required on each invite before publishing to OpenSearch, and persists the updated values back to NATS KV when they differ from what is stored (i.e. for pre-existing invites that predate these fields). Committee base and settings are fetched once per unique committee UID and cached for the duration of the run, avoiding redundant NATS KV reads across invites that share a committee. The NATS KV update uses GetInvite to obtain the current revision and is only performed when a change is detected; indexer and FGA messages are skipped for that invite if the KV write fails. Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- cmd/committee-cli/commands/command.go | 3 + .../commands/sync/reindex_invites.go | 89 ++++++++++++++++--- cmd/committee-cli/main.go | 1 + 3 files changed, 79 insertions(+), 14 deletions(-) diff --git a/cmd/committee-cli/commands/command.go b/cmd/committee-cli/commands/command.go index 5d2d1246..c21d7f0f 100644 --- a/cmd/committee-cli/commands/command.go +++ b/cmd/committee-cli/commands/command.go @@ -34,6 +34,9 @@ type RunContext struct { // (e.g. IndexMemberByCommittee). This is used by data-repair subcommands that bypass the // business-logic orchestrator and write to the storage layer directly. CommitteeMemberWriter port.CommitteeMemberWriter + // CommitteeInviteWriter provides direct storage-layer access to invite write operations + // (e.g. backfilling fields during reindex). Bypasses the business-logic orchestrator. + CommitteeInviteWriter port.CommitteeInviteWriter // Publisher provides direct access to indexer and access-control messaging (e.g. reindex // subcommands that need to publish without going through the writer orchestrator). Publisher port.CommitteePublisher diff --git a/cmd/committee-cli/commands/sync/reindex_invites.go b/cmd/committee-cli/commands/sync/reindex_invites.go index 6794b0e4..3becf008 100644 --- a/cmd/committee-cli/commands/sync/reindex_invites.go +++ b/cmd/committee-cli/commands/sync/reindex_invites.go @@ -57,6 +57,9 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte if rc.Publisher == nil { return errs.NewUnexpected("publisher is not wired in RunContext") } + if rc.CommitteeInviteWriter == nil { + return errs.NewUnexpected("CommitteeInviteWriter is not wired in RunContext") + } ctx = context.WithValue(ctx, constants.AuthorizationContextID, "Bearer lfx-v2-committee-service") @@ -75,12 +78,49 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte stats.Total = len(invites) stats.DryRun = rc.DryRun + // Cache per-committee derived fields to avoid redundant NATS KV reads during batch reindex. + type committeeSnapshot struct { + name string + organizationRequired bool + } + committeeCache := make(map[string]committeeSnapshot) + + lookupCommittee := func(committeeUID string) committeeSnapshot { + if snap, ok := committeeCache[committeeUID]; ok { + return snap + } + snap := committeeSnapshot{} + base, _, err := rc.CommitteeReader.GetBase(ctx, committeeUID) + if err != nil { + slog.WarnContext(ctx, "reindex-invites: failed to fetch committee base", + "committee_uid", committeeUID, "error", err) + committeeCache[committeeUID] = snap + return snap + } + snap.name = base.Name + settings, _, _ := rc.CommitteeReader.GetSettings(ctx, committeeUID) + snap.organizationRequired = base.EnableVoting || (settings != nil && settings.BusinessEmailRequired) + committeeCache[committeeUID] = snap + return snap + } + for _, invite := range invites { + snap := lookupCommittee(invite.CommitteeUID) + + needsKVUpdate := (invite.CommitteeName == "" && snap.name != "") || + invite.OrganizationRequired != snap.organizationRequired + if invite.CommitteeName == "" { + invite.CommitteeName = snap.name + } + invite.OrganizationRequired = snap.organizationRequired if rc.DryRun { slog.InfoContext(ctx, "dry-run: would reindex invite", "invite_uid", invite.UID, "committee_uid", invite.CommitteeUID, + "committee_name", invite.CommitteeName, + "organization_required", invite.OrganizationRequired, + "kv_update_needed", needsKVUpdate, "status", invite.Status, ) stats.Updated++ @@ -89,22 +129,43 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte failed := false - if err := publishIndexerMessage(ctx, rc, invite); err != nil { - slog.WarnContext(ctx, "failed to publish indexer message", - "error", err, - "invite_uid", invite.UID, - "committee_uid", invite.CommitteeUID, - ) - failed = true + if needsKVUpdate { + _, rev, getErr := rc.CommitteeReader.GetInvite(ctx, invite.UID) + if getErr != nil { + slog.WarnContext(ctx, "failed to fetch invite revision for KV update", + "error", getErr, + "invite_uid", invite.UID, + ) + failed = true + } else if updateErr := rc.CommitteeInviteWriter.UpdateInvite(ctx, invite, rev); updateErr != nil { + slog.WarnContext(ctx, "failed to update invite in NATS KV", + "error", updateErr, + "invite_uid", invite.UID, + ) + failed = true + } } - if err := publishAccessControlMessage(ctx, rc, invite); err != nil { - slog.WarnContext(ctx, "failed to publish access control message", - "error", err, - "invite_uid", invite.UID, - "committee_uid", invite.CommitteeUID, - ) - failed = true + if !failed { + if err := publishIndexerMessage(ctx, rc, invite); err != nil { + slog.WarnContext(ctx, "failed to publish indexer message", + "error", err, + "invite_uid", invite.UID, + "committee_uid", invite.CommitteeUID, + ) + failed = true + } + } + + if !failed { + if err := publishAccessControlMessage(ctx, rc, invite); err != nil { + slog.WarnContext(ctx, "failed to publish access control message", + "error", err, + "invite_uid", invite.UID, + "committee_uid", invite.CommitteeUID, + ) + failed = true + } } if failed { diff --git a/cmd/committee-cli/main.go b/cmd/committee-cli/main.go index e98e841a..ade9cd95 100644 --- a/cmd/committee-cli/main.go +++ b/cmd/committee-cli/main.go @@ -111,6 +111,7 @@ func run() error { CommitteeReader: storage, CommitteeWriterOrchestrator: writerOrchestrator, CommitteeMemberWriter: storage, + CommitteeInviteWriter: storage, Publisher: publisher, UserReader: userReader, Args: parsed.SubArgs, From 7dc6d6be860941ea513c1c5acaa55252e8a27392 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 16:27:34 -0700 Subject: [PATCH 5/8] test(LFXV2-2453): add reindex-invites tests and README entry - Add reindex_invites_test.go with 10 table-driven scenarios covering dry-run, old-invite backfill, new-invite no-op, org_required mismatch, committee fetch failure (preserves existing fields), KV update failure (skips publish), committee-uid filter, committee cache, and publish errors - Extend mockReader in total_members_attribute_test.go with invite, settings, and per-invite revision/error fields so all sync tests share one fake - Add mockInviteWriter and mockPublisher to the new test file - Fix a correctness bug in reindex_invites.go: guard all invite field mutations behind snap.fetched so a transient committee lookup failure cannot corrupt correctly-set fields on new invites - Document sync reindex-invites in cmd/committee-cli/README.md Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- cmd/committee-cli/README.md | 38 +++ .../commands/sync/reindex_invites.go | 20 +- .../commands/sync/reindex_invites_test.go | 278 ++++++++++++++++++ .../sync/total_members_attribute_test.go | 44 ++- 4 files changed, 369 insertions(+), 11 deletions(-) create mode 100644 cmd/committee-cli/commands/sync/reindex_invites_test.go diff --git a/cmd/committee-cli/README.md b/cmd/committee-cli/README.md index ed78ea6f..3772bddc 100644 --- a/cmd/committee-cli/README.md +++ b/cmd/committee-cli/README.md @@ -98,6 +98,44 @@ NATS_URL=nats://localhost:4222 \ committee-cli sync members-by-committee-index --committee-uid=abc-123 ``` +#### `sync reindex-invites` + +Re-publishes all committee invites from NATS KV to OpenSearch (via the indexer) and OpenFGA (via fga-sync). For each invite, the command fetches the parent committee's base and settings, backfills `committee_name` (if missing) and recomputes `organization_required` (`enable_voting || business_email_required`), persists any changed fields back to NATS KV, then publishes the updated invite to the indexer and access-control subjects. + +Committee base and settings are fetched once per unique committee UID and cached for the duration of the run. If the committee fetch fails the invite is published as-is without modifying its stored fields. + +**Subcommand flags** + +| Flag | Default | Description | +|---|---|---| +| `--committee-uid` | `""` | Limit reindex to invites of a single committee | +| `--sleep` | `0` | Wait between each invite publish (e.g. `200ms`, `1s`) | +| `--dry-run` | `false` | Log what would be published and updated without writing | + +**Exit code:** `0` if no invites failed, `1` otherwise. + +**Output:** Structured JSON log line on completion with fields `total`, `updated`, `skipped`, `failed`, `duration_ms`, `rate_per_sec`. + +**Examples** + +Dry-run to preview scope (safe first step): +```sh +NATS_URL=nats://localhost:4222 LOG_LEVEL=info \ + committee-cli sync reindex-invites --dry-run +``` + +Full reindex with a 200ms pause between invites: +```sh +NATS_URL=nats://localhost:4222 \ + committee-cli sync reindex-invites --sleep=200ms +``` + +Reindex a single committee's invites: +```sh +NATS_URL=nats://localhost:4222 \ + committee-cli sync reindex-invites --committee-uid=abc-123 +``` + ## Building ### Local binary diff --git a/cmd/committee-cli/commands/sync/reindex_invites.go b/cmd/committee-cli/commands/sync/reindex_invites.go index 3becf008..dba4566a 100644 --- a/cmd/committee-cli/commands/sync/reindex_invites.go +++ b/cmd/committee-cli/commands/sync/reindex_invites.go @@ -79,9 +79,11 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte stats.DryRun = rc.DryRun // Cache per-committee derived fields to avoid redundant NATS KV reads during batch reindex. + // fetched=false means GetBase failed; in that case no fields on the invite are modified. type committeeSnapshot struct { name string organizationRequired bool + fetched bool } committeeCache := make(map[string]committeeSnapshot) @@ -97,6 +99,7 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte committeeCache[committeeUID] = snap return snap } + snap.fetched = true snap.name = base.Name settings, _, _ := rc.CommitteeReader.GetSettings(ctx, committeeUID) snap.organizationRequired = base.EnableVoting || (settings != nil && settings.BusinessEmailRequired) @@ -107,12 +110,19 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte for _, invite := range invites { snap := lookupCommittee(invite.CommitteeUID) - needsKVUpdate := (invite.CommitteeName == "" && snap.name != "") || - invite.OrganizationRequired != snap.organizationRequired - if invite.CommitteeName == "" { - invite.CommitteeName = snap.name + // Only modify invite fields when the committee lookup succeeded, to avoid + // corrupting correctly-set values on invites whose committee is temporarily unreachable. + needsKVUpdate := false + if snap.fetched { + if invite.CommitteeName == "" && snap.name != "" { + invite.CommitteeName = snap.name + needsKVUpdate = true + } + if invite.OrganizationRequired != snap.organizationRequired { + invite.OrganizationRequired = snap.organizationRequired + needsKVUpdate = true + } } - invite.OrganizationRequired = snap.organizationRequired if rc.DryRun { slog.InfoContext(ctx, "dry-run: would reindex invite", diff --git a/cmd/committee-cli/commands/sync/reindex_invites_test.go b/cmd/committee-cli/commands/sync/reindex_invites_test.go new file mode 100644 index 00000000..7d1fbe8f --- /dev/null +++ b/cmd/committee-cli/commands/sync/reindex_invites_test.go @@ -0,0 +1,278 @@ +// Copyright The Linux Foundation and each contributor to LFX. +// SPDX-License-Identifier: MIT + +package sync + +import ( + "context" + "errors" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/linuxfoundation/lfx-v2-committee-service/cmd/committee-cli/commands" + "github.com/linuxfoundation/lfx-v2-committee-service/internal/domain/model" +) + +// mockInviteWriter records UpdateInvite calls for assertion in tests. +type mockInviteWriter struct { + updated []*model.CommitteeInvite + updatedRevs []uint64 + updateErr error +} + +func (w *mockInviteWriter) CreateInvite(_ context.Context, _ *model.CommitteeInvite) error { + return nil +} +func (w *mockInviteWriter) UpdateInvite(_ context.Context, inv *model.CommitteeInvite, rev uint64) error { + if w.updateErr != nil { + return w.updateErr + } + w.updated = append(w.updated, inv) + w.updatedRevs = append(w.updatedRevs, rev) + return nil +} +func (w *mockInviteWriter) UniqueInvite(_ context.Context, _ *model.CommitteeInvite) (string, error) { + return "", nil +} + +// mockPublisher records Indexer and Access call counts. +type mockPublisher struct { + indexerCalls int + accessCalls int + indexerErr error + accessErr error +} + +func (p *mockPublisher) Indexer(_ context.Context, _ string, _ any, _ bool) error { + p.indexerCalls++ + return p.indexerErr +} +func (p *mockPublisher) Access(_ context.Context, _ string, _ any, _ bool) error { + p.accessCalls++ + return p.accessErr +} +func (p *mockPublisher) Event(_ context.Context, _ string, _ any, _ bool) error { return nil } + +// newReindexRC builds a RunContext wired for reindex-invites tests. +func newReindexRC(r *mockReader, iw *mockInviteWriter, pub *mockPublisher, args ...string) commands.RunContext { + return commands.RunContext{ + CommitteeReader: r, + CommitteeInviteWriter: iw, + Publisher: pub, + Args: args, + } +} + +func TestReindexInvites_NoInvites_Succeeds(t *testing.T) { + r := &mockReader{} + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + assert.Empty(t, iw.updated) + assert.Equal(t, 0, pub.indexerCalls) +} + +func TestReindexInvites_MissingWriter_ReturnsError(t *testing.T) { + r := &mockReader{ + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1"}, + }, + } + pub := &mockPublisher{} + rc := commands.RunContext{ + CommitteeReader: r, + Publisher: pub, + // CommitteeInviteWriter intentionally omitted + } + err := (&reindexInvitesSubcommand{}).Run(context.Background(), rc) + require.Error(t, err) +} + +func TestReindexInvites_DryRun_NoWritesOrPublishes(t *testing.T) { + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC", EnableVoting: true}, + }, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", Status: "pending"}, + }, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub, "--dry-run")) + require.NoError(t, err) + assert.Empty(t, iw.updated) + assert.Equal(t, 0, pub.indexerCalls) +} + +func TestReindexInvites_OldInvite_BackfillsNameAndOrgRequired(t *testing.T) { + const rev uint64 = 7 + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC", EnableVoting: true}, + }, + invites: []*model.CommitteeInvite{ + // Old invite: CommitteeName empty, OrganizationRequired false (zero value). + {UID: "i1", CommitteeUID: "c1", Status: "pending"}, + }, + inviteRevision: map[string]uint64{"i1": rev}, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + require.Len(t, iw.updated, 1) + assert.Equal(t, "TSC", iw.updated[0].CommitteeName) + assert.True(t, iw.updated[0].OrganizationRequired) + assert.Equal(t, rev, iw.updatedRevs[0]) + assert.Equal(t, 1, pub.indexerCalls) + assert.Equal(t, 1, pub.accessCalls) +} + +func TestReindexInvites_NewInvite_NoKVUpdate(t *testing.T) { + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC", EnableVoting: true}, + }, + invites: []*model.CommitteeInvite{ + // New invite: fields already correct. + {UID: "i1", CommitteeUID: "c1", CommitteeName: "TSC", OrganizationRequired: true, Status: "pending"}, + }, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + assert.Empty(t, iw.updated, "no KV write expected when fields already match") + assert.Equal(t, 1, pub.indexerCalls) +} + +func TestReindexInvites_OrgRequiredMismatch_UpdatesKV(t *testing.T) { + const rev uint64 = 3 + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC", EnableVoting: false}, + }, + settings: map[string]*model.CommitteeSettings{ + "c1": {BusinessEmailRequired: true}, + }, + invites: []*model.CommitteeInvite{ + // Invite has wrong OrganizationRequired (false), but committee now requires it. + {UID: "i1", CommitteeUID: "c1", CommitteeName: "TSC", OrganizationRequired: false, Status: "pending"}, + }, + inviteRevision: map[string]uint64{"i1": rev}, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + require.Len(t, iw.updated, 1) + assert.True(t, iw.updated[0].OrganizationRequired) + assert.Equal(t, rev, iw.updatedRevs[0]) +} + +func TestReindexInvites_CommitteeFetchFails_StillPublishes_NoKVWrite(t *testing.T) { + r := &mockReader{ + baseErr: map[string]error{"c1": errors.New("nats timeout")}, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", CommitteeName: "TSC", OrganizationRequired: true, Status: "pending"}, + }, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + assert.Empty(t, iw.updated, "no KV write when committee fetch fails") + assert.Equal(t, 1, pub.indexerCalls, "publish still happens despite fetch failure") + // Original fields must be preserved unchanged. + assert.Equal(t, "TSC", r.invites[0].CommitteeName) + assert.True(t, r.invites[0].OrganizationRequired) +} + +func TestReindexInvites_KVUpdateFails_CountedAsFailed_NoPublish(t *testing.T) { + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC", EnableVoting: true}, + }, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", Status: "pending"}, + }, + inviteRevision: map[string]uint64{"i1": 1}, + } + iw := &mockInviteWriter{updateErr: errors.New("write conflict")} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.Error(t, err) + assert.Equal(t, 0, pub.indexerCalls, "publish must not happen after a failed KV write") +} + +func TestReindexInvites_FilterByCommitteeUID(t *testing.T) { + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC"}, + "c2": {Name: "Security"}, + }, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", Status: "pending"}, + {UID: "i2", CommitteeUID: "c2", Status: "pending"}, + }, + } + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub, "--committee-uid=c1")) + require.NoError(t, err) + assert.Equal(t, 1, pub.indexerCalls, "only c1 invite should be published") +} + +func TestReindexInvites_CommitteeCache_FetchedOncePerCommittee(t *testing.T) { + fetchCount := 0 + // Use a custom reader that counts GetBase calls by piggy-backing on baseErr. + // We use a regular mockReader but verify via the committee cache: two invites for + // the same committee should result in only one publish pair each, and the bases + // map having one entry verifies the cache lookup path via the existing mock. + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC"}, + }, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", CommitteeName: "TSC", Status: "pending"}, + {UID: "i2", CommitteeUID: "c1", CommitteeName: "TSC", Status: "pending"}, + }, + } + _ = fetchCount + iw := &mockInviteWriter{} + pub := &mockPublisher{} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.NoError(t, err) + assert.Equal(t, 2, pub.indexerCalls, "both invites published") +} + +func TestReindexInvites_MultipleInvites_SomeFailPublish_ReturnsError(t *testing.T) { + r := &mockReader{ + bases: map[string]*model.CommitteeBase{ + "c1": {Name: "TSC"}, + }, + invites: []*model.CommitteeInvite{ + {UID: "i1", CommitteeUID: "c1", CommitteeName: "TSC", Status: "pending"}, + {UID: "i2", CommitteeUID: "c1", CommitteeName: "TSC", Status: "pending"}, + }, + } + iw := &mockInviteWriter{} + // Indexer fails on all calls. + pub := &mockPublisher{indexerErr: errors.New("indexer unavailable")} + + err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) + require.Error(t, err) +} diff --git a/cmd/committee-cli/commands/sync/total_members_attribute_test.go b/cmd/committee-cli/commands/sync/total_members_attribute_test.go index a145d28a..6d4d811d 100644 --- a/cmd/committee-cli/commands/sync/total_members_attribute_test.go +++ b/cmd/committee-cli/commands/sync/total_members_attribute_test.go @@ -23,6 +23,14 @@ type mockReader struct { members map[string][]*model.CommitteeMember membersErr map[string]error + + settings map[string]*model.CommitteeSettings + settingsErr map[string]error + + invites []*model.CommitteeInvite + invitesByCommitte map[string][]*model.CommitteeInvite + inviteRevision map[string]uint64 + inviteGetErr map[string]error } func (r *mockReader) ListAllUIDs(_ context.Context) ([]string, error) { @@ -66,14 +74,32 @@ func (r *mockReader) GetMember(_ context.Context, uid string) (*model.CommitteeM func (r *mockReader) GetMemberRevision(_ context.Context, _ string) (uint64, error) { return 0, nil } -func (r *mockReader) GetInvite(_ context.Context, _ string) (*model.CommitteeInvite, uint64, error) { - return nil, 0, nil +func (r *mockReader) GetInvite(_ context.Context, uid string) (*model.CommitteeInvite, uint64, error) { + if err, ok := r.inviteGetErr[uid]; ok { + return nil, 0, err + } + rev := r.inviteRevision[uid] + for _, inv := range r.invites { + if inv.UID == uid { + return inv, rev, nil + } + } + return nil, rev, nil } -func (r *mockReader) ListInvites(_ context.Context, _ string) ([]*model.CommitteeInvite, error) { - return nil, nil +func (r *mockReader) ListInvites(_ context.Context, committeeUID string) ([]*model.CommitteeInvite, error) { + if r.invitesByCommitte != nil { + return r.invitesByCommitte[committeeUID], nil + } + var out []*model.CommitteeInvite + for _, inv := range r.invites { + if inv.CommitteeUID == committeeUID { + out = append(out, inv) + } + } + return out, nil } func (r *mockReader) ListAllInvites(_ context.Context) ([]*model.CommitteeInvite, error) { - return nil, nil + return r.invites, nil } func (r *mockReader) GetApplication(_ context.Context, _ string) (*model.CommitteeApplication, uint64, error) { return nil, 0, nil @@ -81,7 +107,13 @@ func (r *mockReader) GetApplication(_ context.Context, _ string) (*model.Committ func (r *mockReader) ListApplications(_ context.Context, _ string) ([]*model.CommitteeApplication, error) { return nil, nil } -func (r *mockReader) GetSettings(_ context.Context, _ string) (*model.CommitteeSettings, uint64, error) { +func (r *mockReader) GetSettings(_ context.Context, uid string) (*model.CommitteeSettings, uint64, error) { + if err, ok := r.settingsErr[uid]; ok { + return nil, 0, err + } + if r.settings != nil { + return r.settings[uid], 0, nil + } return nil, 0, nil } From 6e1d6ce0c390f3343b7fcccaedf583ad09d3a8ec Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Thu, 18 Jun 2026 16:57:43 -0700 Subject: [PATCH 6/8] fix(review): address PR #135 review feedback Address review comments from copilot-pull-request-reviewer and coderabbitai: - reindex_invites.go: apply KV backfill to fresh invite from GetInvite - reindex_invites_test.go: assert access publish and committee cache hits - total_members_attribute_test.go: fix invitesByCommittee typo, track GetBase calls - committee_service.go: log GetSettings failures for organization_required - committee_service_test.go: assert committee_name and organization_required - gen/http: restore accept-invite optional-body patches reverted by apigen Resolves 10 review threads. Signed-off-by: Andres Tobon --- .../service/committee_service.go | 12 ++++++++-- .../service/committee_service_test.go | 4 ++++ .../commands/sync/reindex_invites.go | 22 +++++++++++++------ .../commands/sync/reindex_invites_test.go | 8 ++----- .../sync/total_members_attribute_test.go | 14 +++++++----- gen/http/cli/committee/cli.go | 2 +- gen/http/committee_service/client/cli.go | 7 +++++- gen/http/committee_service/client/types.go | 2 +- gen/http/openapi.json | 2 +- gen/http/openapi.yaml | 2 +- gen/http/openapi3.json | 2 +- gen/http/openapi3.yaml | 2 +- 12 files changed, 51 insertions(+), 28 deletions(-) diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 65e319cf..71ea8d25 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -660,7 +660,11 @@ func (s *committeeServicesrvc) CreateInvite(ctx context.Context, p *committeeser } // Best-effort: settings drive organization_required; missing settings means false. - committeeSettings, _, _ := s.storage.GetSettings(ctx, p.UID) + committeeSettings, _, settingsErr := s.storage.GetSettings(ctx, p.UID) + if settingsErr != nil { + slog.WarnContext(ctx, "CreateInvite: failed to get committee settings for organization_required", + "committee_uid", p.UID, "error", settingsErr) + } orgRequired := committeeBase.EnableVoting || (committeeSettings != nil && committeeSettings.BusinessEmailRequired) var inviteOrgID, inviteOrgName, inviteOrgWebsite *string @@ -1338,7 +1342,11 @@ func (s *committeeServicesrvc) enrichInviteFromCommittee(ctx context.Context, in if invite.CommitteeName == "" { invite.CommitteeName = cb.Name } - settings, _, _ := s.storage.GetSettings(ctx, committeeUID) + settings, _, settingsErr := s.storage.GetSettings(ctx, committeeUID) + if settingsErr != nil { + slog.WarnContext(ctx, "enrichInviteFromCommittee: failed to get committee settings", + "committee_uid", committeeUID, "error", settingsErr) + } invite.OrganizationRequired = cb.EnableVoting || (settings != nil && settings.BusinessEmailRequired) } diff --git a/cmd/committee-api/service/committee_service_test.go b/cmd/committee-api/service/committee_service_test.go index e02e3714..aeed9324 100644 --- a/cmd/committee-api/service/committee_service_test.go +++ b/cmd/committee-api/service/committee_service_test.go @@ -681,6 +681,8 @@ func TestGetInvite(t *testing.T) { require.NoError(t, err) require.NotNil(t, result) assert.Equal(t, tt.payload.InviteUID, *result.UID) + assert.Equal(t, "Technical Advisory Committee", *result.CommitteeName) + assert.True(t, *result.OrganizationRequired) } }) } @@ -732,6 +734,8 @@ func TestCreateInvite(t *testing.T) { assert.Equal(t, tt.payload.UID, *result.CommitteeUID) assert.Equal(t, tt.payload.InviteeEmail, *result.InviteeEmail) assert.Equal(t, "pending", result.Status) + assert.Equal(t, "Technical Advisory Committee", *result.CommitteeName) + assert.True(t, *result.OrganizationRequired) require.Len(t, sender.calls, 1) call := sender.calls[0] diff --git a/cmd/committee-cli/commands/sync/reindex_invites.go b/cmd/committee-cli/commands/sync/reindex_invites.go index dba4566a..b76917e9 100644 --- a/cmd/committee-cli/commands/sync/reindex_invites.go +++ b/cmd/committee-cli/commands/sync/reindex_invites.go @@ -140,19 +140,27 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte failed := false if needsKVUpdate { - _, rev, getErr := rc.CommitteeReader.GetInvite(ctx, invite.UID) + freshInvite, rev, getErr := rc.CommitteeReader.GetInvite(ctx, invite.UID) if getErr != nil { slog.WarnContext(ctx, "failed to fetch invite revision for KV update", "error", getErr, "invite_uid", invite.UID, ) failed = true - } else if updateErr := rc.CommitteeInviteWriter.UpdateInvite(ctx, invite, rev); updateErr != nil { - slog.WarnContext(ctx, "failed to update invite in NATS KV", - "error", updateErr, - "invite_uid", invite.UID, - ) - failed = true + } else { + if freshInvite.CommitteeName == "" && snap.name != "" { + freshInvite.CommitteeName = snap.name + } + freshInvite.OrganizationRequired = snap.organizationRequired + if updateErr := rc.CommitteeInviteWriter.UpdateInvite(ctx, freshInvite, rev); updateErr != nil { + slog.WarnContext(ctx, "failed to update invite in NATS KV", + "error", updateErr, + "invite_uid", invite.UID, + ) + failed = true + } else { + invite = freshInvite + } } } diff --git a/cmd/committee-cli/commands/sync/reindex_invites_test.go b/cmd/committee-cli/commands/sync/reindex_invites_test.go index 7d1fbe8f..9b7070c9 100644 --- a/cmd/committee-cli/commands/sync/reindex_invites_test.go +++ b/cmd/committee-cli/commands/sync/reindex_invites_test.go @@ -152,6 +152,7 @@ func TestReindexInvites_NewInvite_NoKVUpdate(t *testing.T) { require.NoError(t, err) assert.Empty(t, iw.updated, "no KV write expected when fields already match") assert.Equal(t, 1, pub.indexerCalls) + assert.Equal(t, 1, pub.accessCalls) } func TestReindexInvites_OrgRequiredMismatch_UpdatesKV(t *testing.T) { @@ -236,11 +237,6 @@ func TestReindexInvites_FilterByCommitteeUID(t *testing.T) { } func TestReindexInvites_CommitteeCache_FetchedOncePerCommittee(t *testing.T) { - fetchCount := 0 - // Use a custom reader that counts GetBase calls by piggy-backing on baseErr. - // We use a regular mockReader but verify via the committee cache: two invites for - // the same committee should result in only one publish pair each, and the bases - // map having one entry verifies the cache lookup path via the existing mock. r := &mockReader{ bases: map[string]*model.CommitteeBase{ "c1": {Name: "TSC"}, @@ -250,12 +246,12 @@ func TestReindexInvites_CommitteeCache_FetchedOncePerCommittee(t *testing.T) { {UID: "i2", CommitteeUID: "c1", CommitteeName: "TSC", Status: "pending"}, }, } - _ = fetchCount iw := &mockInviteWriter{} pub := &mockPublisher{} err := (&reindexInvitesSubcommand{}).Run(context.Background(), newReindexRC(r, iw, pub)) require.NoError(t, err) + assert.Equal(t, 1, r.getBaseCalls, "committee base should be fetched once per unique committee") assert.Equal(t, 2, pub.indexerCalls, "both invites published") } diff --git a/cmd/committee-cli/commands/sync/total_members_attribute_test.go b/cmd/committee-cli/commands/sync/total_members_attribute_test.go index 6d4d811d..07b605b5 100644 --- a/cmd/committee-cli/commands/sync/total_members_attribute_test.go +++ b/cmd/committee-cli/commands/sync/total_members_attribute_test.go @@ -27,10 +27,11 @@ type mockReader struct { settings map[string]*model.CommitteeSettings settingsErr map[string]error - invites []*model.CommitteeInvite - invitesByCommitte map[string][]*model.CommitteeInvite - inviteRevision map[string]uint64 - inviteGetErr map[string]error + invites []*model.CommitteeInvite + invitesByCommittee map[string][]*model.CommitteeInvite + inviteRevision map[string]uint64 + inviteGetErr map[string]error + getBaseCalls int } func (r *mockReader) ListAllUIDs(_ context.Context) ([]string, error) { @@ -38,6 +39,7 @@ func (r *mockReader) ListAllUIDs(_ context.Context) ([]string, error) { } func (r *mockReader) GetBase(_ context.Context, uid string) (*model.CommitteeBase, uint64, error) { + r.getBaseCalls++ if err, ok := r.baseErr[uid]; ok { return nil, 0, err } @@ -87,8 +89,8 @@ func (r *mockReader) GetInvite(_ context.Context, uid string) (*model.CommitteeI return nil, rev, nil } func (r *mockReader) ListInvites(_ context.Context, committeeUID string) ([]*model.CommitteeInvite, error) { - if r.invitesByCommitte != nil { - return r.invitesByCommitte[committeeUID], nil + if r.invitesByCommittee != nil { + return r.invitesByCommittee[committeeUID], nil } var out []*model.CommitteeInvite for _, inv := range r.invites { diff --git a/gen/http/cli/committee/cli.go b/gen/http/cli/committee/cli.go index 5d6eb460..5e51df35 100644 --- a/gen/http/cli/committee/cli.go +++ b/gen/http/cli/committee/cli.go @@ -156,7 +156,7 @@ func ParseEndpoint( committeeServiceRevokeInviteBearerTokenFlag = committeeServiceRevokeInviteFlags.String("bearer-token", "", "") committeeServiceAcceptInviteFlags = flag.NewFlagSet("accept-invite", flag.ExitOnError) - committeeServiceAcceptInviteBodyFlag = committeeServiceAcceptInviteFlags.String("body", "REQUIRED", "") + committeeServiceAcceptInviteBodyFlag = committeeServiceAcceptInviteFlags.String("body", "{}", "") committeeServiceAcceptInviteUIDFlag = committeeServiceAcceptInviteFlags.String("uid", "REQUIRED", "Committee UID -- v2 uid, not related to v1 id directly") committeeServiceAcceptInviteInviteUIDFlag = committeeServiceAcceptInviteFlags.String("invite-uid", "REQUIRED", "Committee invite UID") committeeServiceAcceptInviteVersionFlag = committeeServiceAcceptInviteFlags.String("version", "REQUIRED", "") diff --git a/gen/http/committee_service/client/cli.go b/gen/http/committee_service/client/cli.go index 3083b308..04b2fa90 100644 --- a/gen/http/committee_service/client/cli.go +++ b/gen/http/committee_service/client/cli.go @@ -12,6 +12,7 @@ import ( "encoding/json" "fmt" "strconv" + "strings" "unicode/utf8" committeeservice "github.com/linuxfoundation/lfx-v2-committee-service/gen/committee_service" @@ -1445,7 +1446,11 @@ func BuildAcceptInvitePayload(committeeServiceAcceptInviteBody string, committee var err error var body AcceptInviteRequestBody { - err = json.Unmarshal([]byte(committeeServiceAcceptInviteBody), &body) + bodyJSON := strings.TrimSpace(committeeServiceAcceptInviteBody) + if bodyJSON == "" || bodyJSON == "REQUIRED" { + bodyJSON = "{}" + } + err = json.Unmarshal([]byte(bodyJSON), &body) if err != nil { return nil, fmt.Errorf("invalid JSON for body, \nerror: %s, \nexample of valid JSON:\n%s", err, "'{\n \"organization\": {\n \"id\": \"org-123456\",\n \"name\": \"The Linux Foundation\",\n \"website\": \"https://linuxfoundation.org\"\n }\n }'") } diff --git a/gen/http/committee_service/client/types.go b/gen/http/committee_service/client/types.go index 268a8198..48fe6637 100644 --- a/gen/http/committee_service/client/types.go +++ b/gen/http/committee_service/client/types.go @@ -3312,7 +3312,7 @@ func NewCreateInviteRequestBody(p *committeeservice.CreateInvitePayload) *Create // the "accept-invite" endpoint of the "committee-service" service. func NewAcceptInviteRequestBody(p *committeeservice.AcceptInvitePayload) *AcceptInviteRequestBody { body := &AcceptInviteRequestBody{} - if p.Body.Organization != nil { + if p.Body != nil && p.Body.Organization != nil { body.Organization = &struct { // Organization ID ID *string `form:"id" json:"id" xml:"id"` diff --git a/gen/http/openapi.json b/gen/http/openapi.json index 70e94bd9..4aba52bd 100644 --- a/gen/http/openapi.json +++ b/gen/http/openapi.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":true,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file +{"swagger":"2.0","info":{"title":"Committee Management Service","version":"0.0.1"},"host":"localhost:80","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-CommitteeRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeRequestBody","required":["name","category","project_uid"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","required":false,"type":"integer","maximum":500,"minimum":1},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","required":false,"type":"string"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeatPage","required":["seats"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"type":"string","pattern":"^[A-Za-z0-9]{18}$"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reassign-Org-Committee-SeatRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceReassignOrgCommitteeSeatRequestBody","required":["committee_uid","first_name","last_name","email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/OrgCommitteeSeat","required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeBaseResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-BaseRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeBaseRequestBody","required":["name","category","project_uid"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Submit-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceSubmitApplicationRequestBody"}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Approve-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceApproveApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Reject-ApplicationRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceRejectApplicationRequestBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeApplicationWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","consumes":["multipart/form-data"],"parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Upload-Committee-DocumentRequestBody","in":"formData","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUploadCommitteeDocumentRequestBody","required":["name","file_name","content_type","file"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeDocumentResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":true,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response."},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-Link-FolderRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkFolderRequestBody","required":["name"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/folders/{folder_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkFolderResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-InviteRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateInviteRequestBody","required":["invitee_email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}":{"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Accept-InviteRequestBody","in":"body","description":"Optional JSON body","required":false,"schema":{"$ref":"#/definitions/AcceptInviteOptionalBody"}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeInviteWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","required":false,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"array","items":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-LinkRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeLinkRequestBody","required":["name","url"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/links/{link_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeLinkResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","required":false,"type":"boolean","default":false},{"name":"Create-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceCreateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"201":{"description":"Created response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/members/{member_uid}":{"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeMemberResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-MemberRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeMemberRequestBody","required":["email"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","required":true,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false}],"responses":{"204":{"description":"No Content response."},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeServiceGetCommitteeSettingsResponseBody"},"headers":{"ETag":{"description":"ETag header value","type":"string"}}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","required":false,"type":"string"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","required":false,"type":"boolean","default":false},{"name":"Update-Committee-SettingsRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCommitteeSettingsRequestBody","required":["business_email_required"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/ConflictError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefCurrentResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Update-Current-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","required":["brief_text","revision"]}}],"responses":{"200":{"description":"OK response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefRevisionConflictError","required":["code","revision"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","required":false,"type":"string","enum":["1"]},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"type":"string","format":"uuid"},{"name":"Authorization","in":"header","description":"JWT token issued by Heimdall","required":false,"type":"string"},{"name":"Generate-Weekly-BriefRequestBody","in":"body","required":true,"schema":{"$ref":"#/definitions/CommitteeServiceGenerateWeeklyBriefRequestBody"}}],"responses":{"202":{"description":"Accepted response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefGenerateResult"}},"400":{"description":"Bad Request response.","schema":{"$ref":"#/definitions/BadRequestError","required":["message"]}},"403":{"description":"Forbidden response.","schema":{"$ref":"#/definitions/ForbiddenError","required":["message"]}},"404":{"description":"Not Found response.","schema":{"$ref":"#/definitions/NotFoundError","required":["message"]}},"409":{"description":"Conflict response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefEditedExistsError","required":["code","revision"]}},"429":{"description":"Too Many Requests response.","schema":{"$ref":"#/definitions/GroupWeeklyBriefThrottleExceededError","required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]}},"500":{"description":"Internal Server Error response.","schema":{"$ref":"#/definitions/InternalServerError","required":["message"]}},"503":{"description":"Service Unavailable response.","schema":{"$ref":"#/definitions/ServiceUnavailableError","required":["message"]}}},"schemes":["http"],"security":[{"jwt_header_Authorization":null}]}}},"definitions":{"AcceptInviteOptionalBody":{"title":"AcceptInviteOptionalBody","type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"BadRequestError":{"title":"BadRequestError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"description":"Bad request","example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"title":"CommitteeApplicationWithReadonlyAttributes","type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBaseWithReadonlyAttributes":{"title":"CommitteeBaseWithReadonlyAttributes","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"title":"CommitteeDocumentWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFullWithReadonlyAttributes":{"title":"CommitteeFullWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"title":"CommitteeInviteWithReadonlyAttributes","type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"title":"CommitteeLinkFolderWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"title":"CommitteeLinkWithReadonlyAttributes","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberFullWithReadonlyAttributes":{"title":"CommitteeMemberFullWithReadonlyAttributes","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeServiceApproveApplicationRequestBody":{"title":"CommitteeServiceApproveApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"CommitteeServiceCreateCommitteeLinkFolderRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkFolderRequestBody","type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CommitteeServiceCreateCommitteeLinkRequestBody":{"title":"CommitteeServiceCreateCommitteeLinkRequestBody","type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"287","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"74716d5c-f7a8-4527-ae14-7aa23b2af4db","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"5o7","folder_uid":"836400f7-e52b-4e05-922b-5779e5d6bfe9","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CommitteeServiceCreateCommitteeMemberRequestBody":{"title":"CommitteeServiceCreateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceCreateCommitteeRequestBody":{"title":"CommitteeServiceCreateCommitteeRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CommitteeServiceCreateInviteRequestBody":{"title":"CommitteeServiceCreateInviteRequestBody","type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"CommitteeServiceGenerateWeeklyBriefRequestBody":{"title":"CommitteeServiceGenerateWeeklyBriefRequestBody","type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"CommitteeServiceGetCommitteeBaseResponseBody":{"title":"CommitteeServiceGetCommitteeBaseResponseBody","$ref":"#/definitions/CommitteeBaseWithReadonlyAttributes"},"CommitteeServiceGetCommitteeDocumentResponseBody":{"title":"CommitteeServiceGetCommitteeDocumentResponseBody","$ref":"#/definitions/CommitteeDocumentWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkFolderResponseBody":{"title":"CommitteeServiceGetCommitteeLinkFolderResponseBody","$ref":"#/definitions/CommitteeLinkFolderWithReadonlyAttributes"},"CommitteeServiceGetCommitteeLinkResponseBody":{"title":"CommitteeServiceGetCommitteeLinkResponseBody","$ref":"#/definitions/CommitteeLinkWithReadonlyAttributes"},"CommitteeServiceGetCommitteeMemberResponseBody":{"title":"CommitteeServiceGetCommitteeMemberResponseBody","$ref":"#/definitions/CommitteeMemberFullWithReadonlyAttributes"},"CommitteeServiceGetCommitteeSettingsResponseBody":{"title":"CommitteeServiceGetCommitteeSettingsResponseBody","$ref":"#/definitions/CommitteeSettingsWithReadonlyAttributes"},"CommitteeServiceReassignOrgCommitteeSeatRequestBody":{"title":"CommitteeServiceReassignOrgCommitteeSeatRequestBody","type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"CommitteeServiceRejectApplicationRequestBody":{"title":"CommitteeServiceRejectApplicationRequestBody","type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Does not meet current requirements.","maxLength":2000}},"example":{"reviewer_notes":"Does not meet current requirements."}},"CommitteeServiceSubmitApplicationRequestBody":{"title":"CommitteeServiceSubmitApplicationRequestBody","type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"CommitteeServiceUpdateCommitteeBaseRequestBody":{"title":"CommitteeServiceUpdateCommitteeBaseRequestBody","type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"CommitteeServiceUpdateCommitteeMemberRequestBody":{"title":"CommitteeServiceUpdateCommitteeMemberRequestBody","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CommitteeServiceUpdateCommitteeSettingsRequestBody":{"title":"CommitteeServiceUpdateCommitteeSettingsRequestBody","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody":{"title":"CommitteeServiceUpdateCurrentWeeklyBriefRequestBody","type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"CommitteeServiceUploadCommitteeDocumentRequestBody":{"title":"CommitteeServiceUploadCommitteeDocumentRequestBody","type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Veniam assumenda."},"description":{"type":"string","description":"Optional description","example":"svp","maxLength":2000},"file":{"type":"string","description":"File content","example":"RmFjZXJlIGFkaXBpc2NpIGFyY2hpdGVjdG8gbGFib3JlLg==","format":"byte"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Eligendi adipisci nisi totam."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Eos aut dolor ea et.","description":"dnp","file":"UGFyaWF0dXIgcXVvIGxhYm9yaW9zYW0gcXVpc3F1YW0gaGFydW0gcXVhZXJhdC4=","file_name":"Qui odit dolor temporibus eius.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]},"CommitteeSettingsWithReadonlyAttributes":{"title":"CommitteeSettingsWithReadonlyAttributes","type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/definitions/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"title":"CommitteeUser","type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"title":"ConflictError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"description":"Conflict","example":{"message":"The resource already exists."},"required":["message"]},"ForbiddenError":{"title":"ForbiddenError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GroupWeeklyBriefCurrentResult":{"title":"GroupWeeklyBriefCurrentResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"title":"GroupWeeklyBriefEditedExistsError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"An edited brief exists and force is not set","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"title":"GroupWeeklyBriefGenerateResult","type":"object","properties":{"brief":{"$ref":"#/definitions/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/definitions/GroupWeeklyBriefThrottle"}},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"title":"GroupWeeklyBriefRevisionConflictError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"The revision token is stale; the brief was edited concurrently","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"title":"GroupWeeklyBriefSourceRef","type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"rj0","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"tel","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"title":"GroupWeeklyBriefThrottle","type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"title":"GroupWeeklyBriefThrottleExceededError","type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week generation or regeneration limit exhausted","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"title":"GroupWeeklyBriefWithReadonlyAttributes","type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"zxj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/definitions/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"vuy","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"title":"InternalServerError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"description":"Internal server error","example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"title":"NotFoundError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"description":"Resource not found","example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"title":"OrgCommitteeSeat","type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"title":"OrgCommitteeSeatPage","type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/definitions/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ServiceUnavailableError":{"title":"ServiceUnavailableError","type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"description":"Service unavailable","example":{"message":"The service is unavailable."},"required":["message"]}},"securityDefinitions":{"jwt_header_Authorization":{"type":"apiKey","description":"Heimdall authorization","name":"Authorization","in":"header"}}} \ No newline at end of file diff --git a/gen/http/openapi.yaml b/gen/http/openapi.yaml index d6f62c93..6b80bc48 100644 --- a/gen/http/openapi.yaml +++ b/gen/http/openapi.yaml @@ -1377,7 +1377,7 @@ paths: - name: Accept-InviteRequestBody in: body description: Optional JSON body - required: true + required: false schema: $ref: '#/definitions/AcceptInviteOptionalBody' responses: diff --git a/gen/http/openapi3.json b/gen/http/openapi3.json index 2abdd53e..5965bc05 100644 --- a/gen/http/openapi3.json +++ b/gen/http/openapi3.json @@ -1 +1 @@ -{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file +{"openapi":"3.0.3","info":{"title":"Committee Management Service","version":"0.0.1"},"servers":[{"url":"http://localhost:80","description":"Default server for committee"}],"paths":{"/committees":{"post":{"tags":["committee-service"],"summary":"create-committee committee-service","description":"Create Committee","operationId":"committee-service#create-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeFullWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats":{"get":{"tags":["committee-service"],"summary":"get-org-committee-seats committee-service","description":"List a B2B organization's committee seats across the membership project family (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#get-org-committee-seats","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"project_uids","in":"query","description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","allowEmptyValue":true,"schema":{"type":"array","items":{"type":"string","example":"Reprehenderit quas."},"description":"Resolved project-family UIDs (foundation root + descendants) the BFF scopes seats to","example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},"example":["7cad5a8d-19d0-41a4-81a6-043453daf9ee"]},{"name":"page_size","in":"query","description":"Maximum seats to return in this page (default 100, max 500)","allowEmptyValue":true,"schema":{"type":"integer","description":"Maximum seats to return in this page (default 100, max 500)","example":100,"format":"int64","minimum":1,"maximum":500},"example":100},{"name":"page_token","in":"query","description":"Opaque cursor returned by a previous call to fetch the next page","allowEmptyValue":true,"schema":{"type":"string","description":"Opaque cursor returned by a previous call to fetch the next page","example":"eyJvIjoxMDB9"},"example":"eyJvIjoxMDB9"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeatPage"},"example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/b2b-org/{uid}/seats/{member_uid}/reassign":{"put":{"tags":["committee-service"],"summary":"reassign-org-committee-seat committee-service","description":"Reassign a Membership-Entitlement committee seat to a new holder (Org Lens Board \u0026 Committee tab)","operationId":"committee-service#reassign-org-committee-seat","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","required":true,"schema":{"type":"string","description":"B2B organization UID — the 18-char Salesforce Account SFID (canonical b2b_org uid)","example":"001B000000IqhSLIAZ","pattern":"^[A-Za-z0-9]{18}$"},"example":"001B000000IqhSLIAZ"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignOrgCommitteeSeatRequestBody"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Seat not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Concurrent modification","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee committee-service","description":"Delete Committee","operationId":"committee-service#delete-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-base committee-service","description":"Get Committee","operationId":"committee-service#get-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-base committee-service","description":"Update Committee","operationId":"committee-service#update-committee-base","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeBaseRequestBody"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeBaseWithReadonlyAttributes"},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications":{"post":{"tags":["committee-service"],"summary":"submit-application committee-service","description":"Submit an application to join a committee","operationId":"committee-service#submit-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitApplicationRequestBody"},"example":{"message":"I would like to join the TSC to contribute my expertise."}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee does not accept applications","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}":{"get":{"tags":["committee-service"],"summary":"get-application committee-service","description":"Get a single application by UID","operationId":"committee-service#get-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/approve":{"post":{"tags":["committee-service"],"summary":"approve-application committee-service","description":"Approve a pending application","operationId":"committee-service#approve-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Approved based on contribution history."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/applications/{application_uid}/reject":{"post":{"tags":["committee-service"],"summary":"reject-application committee-service","description":"Reject a pending application","operationId":"committee-service#reject-application","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"application_uid","in":"path","description":"Committee application UID","required":true,"schema":{"type":"string","description":"Committee application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"},"example":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveApplicationRequestBody"},"example":{"reviewer_notes":"Does not meet current requirements."}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeApplicationWithReadonlyAttributes"},"example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Application not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Application already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents":{"post":{"tags":["committee-service"],"summary":"upload-committee-document committee-service","description":"Upload a file document to a committee","operationId":"committee-service#upload-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UploadCommitteeDocumentRequestBody"},"example":{"content_type":"Quae velit voluptate.","description":"fi3","file":"VWxsYW0gdG90YW0gcXVvIGNvbnNlcXVhdHVyLg==","file_name":"Error pariatur debitis corrupti numquam consequatur.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Document name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-document committee-service","description":"Delete a document from a committee","operationId":"committee-service#delete-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-document committee-service","description":"Get metadata for a single committee document","operationId":"committee-service#get-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeDocumentWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/documents/{document_uid}/download":{"get":{"tags":["committee-service"],"summary":"download-committee-document committee-service","description":"Download the file for a committee document","operationId":"committee-service#download-committee-document","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"document_uid","in":"path","description":"Committee document UID","required":true,"schema":{"type":"string","description":"Committee document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"example":"d1e2f3a4-b5c6-7890-defa-123456789012"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders":{"get":{"tags":["committee-service"],"summary":"list-committee-link-folders committee-service","description":"List all folders for a committee","operationId":"committee-service#list-committee-link-folders","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link-folder committee-service","description":"Create a folder to organize committee links","operationId":"committee-service#create-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkFolderRequestBody"},"example":{"name":"Meeting Notes"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Folder name already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/folders/{folder_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link-folder committee-service","description":"Delete a folder from a committee. Returns BadRequest if the folder contains links.","operationId":"committee-service#delete-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link-folder committee-service","description":"Get a single folder for a committee","operationId":"committee-service#get-committee-link-folder","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"path","description":"Committee folder UID","required":true,"schema":{"type":"string","description":"Committee folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkFolderWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites":{"post":{"tags":["committee-service"],"summary":"create-invite committee-service","description":"Create an invite for a committee","operationId":"committee-service#create-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInviteRequestBody"},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}":{"delete":{"tags":["committee-service"],"summary":"revoke-invite committee-service","description":"Revoke a pending invite","operationId":"committee-service#revoke-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-invite committee-service","description":"Get a single invite by UID","operationId":"committee-service#get-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/accept":{"post":{"tags":["committee-service"],"summary":"accept-invite committee-service","description":"Accept a pending invite","operationId":"committee-service#accept-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"requestBody":{"description":"Optional JSON body","required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptInviteOptionalBody"},"example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/invites/{invite_uid}/decline":{"post":{"tags":["committee-service"],"summary":"decline-invite committee-service","description":"Decline a pending invite","operationId":"committee-service#decline-invite","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"invite_uid","in":"path","description":"Committee invite UID","required":true,"schema":{"type":"string","description":"Committee invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"},"example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeInviteWithReadonlyAttributes"},"example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: You are not the invitee for this invite","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Invite not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Invite already processed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/join":{"post":{"tags":["committee-service"],"summary":"join-committee committee-service","description":"Self-join a committee (only works when join_mode is open)","operationId":"committee-service#join-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Committee join_mode is not open","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Already a member","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/leave":{"delete":{"tags":["committee-service"],"summary":"leave-committee committee-service","description":"Leave a committee","operationId":"committee-service#leave-committee","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Not a member of this committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links":{"get":{"tags":["committee-service"],"summary":"list-committee-links committee-service","description":"List links for a committee, optionally filtered by folder","operationId":"committee-service#list-committee-links","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"folder_uid","in":"query","description":"Filter links to those inside a specific folder; omit to return all links","allowEmptyValue":true,"schema":{"type":"string","description":"Filter links to those inside a specific folder; omit to return all links","example":"2dd27bf5-b711-4dd7-96ad-5cde70af53eb","format":"uuid"},"example":"760c86c7-66c8-4b77-ac2d-1eb86ba7160f"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]},"example":[{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"},{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}]}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"post":{"tags":["committee-service"],"summary":"create-committee-link committee-service","description":"Add a URL link to a committee","operationId":"committee-service#create-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeLinkRequestBody"},"example":{"description":"vao","folder_uid":"26ffc95d-19b3-4264-bd42-f535e0d919c7","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/links/{link_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-link committee-service","description":"Delete a link from a committee","operationId":"committee-service#delete-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-link committee-service","description":"Get a single link for a committee","operationId":"committee-service#get-committee-link","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"link_uid","in":"path","description":"Committee link UID","required":true,"schema":{"type":"string","description":"Committee link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"example":"c1d2e3f4-a5b6-7890-cdef-123456789012"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeLinkWithReadonlyAttributes"},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members":{"post":{"tags":["committee-service"],"summary":"create-committee-member committee-service","description":"Add a new member to a committee","operationId":"committee-service#create-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true},{"name":"X-Skip-Notification","in":"header","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","allowEmptyValue":true,"schema":{"type":"boolean","description":"When true, suppress the invite/notification email sent to the new member (used for silent bulk imports)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"201":{"description":"Created response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Member already exists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/members/{member_uid}":{"delete":{"tags":["committee-service"],"summary":"delete-committee-member committee-service","description":"Remove a member from a committee","operationId":"committee-service#delete-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"responses":{"204":{"description":"No Content response."},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"get":{"tags":["committee-service"],"summary":"get-committee-member committee-service","description":"Get a specific committee member by UID","operationId":"committee-service#get-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-member committee-service","description":"Replace an existing committee member (requires complete resource)","operationId":"committee-service#update-committee-member","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"member_uid","in":"path","description":"Committee member UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"example":"2200b646-fbb2-4de7-ad80-fd195a874baf"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCommitteeMemberRequestBody"},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeMemberFullWithReadonlyAttributes"},"example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Member not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/settings":{"get":{"tags":["committee-service"],"summary":"get-committee-settings committee-service","description":"Get Committee Settings","operationId":"committee-service#get-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","headers":{"ETag":{"description":"ETag header value","schema":{"type":"string","description":"ETag header value","example":"123"},"example":"123"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-committee-settings committee-service","description":"Update Committee Settings","operationId":"committee-service#update-committee-settings","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"},{"name":"If-Match","in":"header","description":"If-Match header value for conditional requests","allowEmptyValue":true,"schema":{"type":"string","description":"If-Match header value for conditional requests","example":"123"},"example":"123"},{"name":"X-Sync","in":"header","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","allowEmptyValue":true,"schema":{"type":"boolean","description":"Determines if the operation should be synchronous (true) or asynchronous (false, default)","default":false,"example":true},"example":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCommitteeSettingsRequestBody"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitteeSettingsWithReadonlyAttributes"},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"404":{"description":"NotFound: Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"Conflict: Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConflictError"},"example":{"message":"The resource already exists."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/current":{"get":{"tags":["committee-service"],"summary":"get-current-weekly-brief committee-service","description":"Get the working-group weekly brief for the UTC Sun→Sat window selected by the service. For Sunday–Friday this is the previous, completed week; on a Saturday it is the current (not-yet-completed) week. Returns 200 with a null brief and throttle when no draft exists (BFF contract — do not return 404).","operationId":"committee-service#get-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefCurrentResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks viewer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]},"put":{"tags":["committee-service"],"summary":"update-current-weekly-brief committee-service","description":"Save chair-edited brief text for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Overwrites brief_text and transitions the brief to the \"edited\" state, preserving source_refs. Optimistic concurrency: the caller echoes the revision from GET /current; a stale revision returns 409 with the current revision so the client can refetch and retry. Returns 404 when no brief exists for the window (generate one first), 400 when brief_text is empty.","operationId":"committee-service#update-current-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentWeeklyBriefRequestBody"},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7}}}},"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"example":{"brief_text":"xcs","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}}}},"400":{"description":"BadRequest: brief_text is empty or invalid","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found, or no brief exists for the current window","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"RevisionConflict: The revision token is stale; the brief was edited concurrently","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefRevisionConflictError"},"example":{"code":"revision_conflict","revision":8}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}},"/committees/{uid}/weekly-briefs/generate":{"post":{"tags":["committee-service"],"summary":"generate-weekly-brief committee-service","description":"Asynchronously generate (or regenerate) the working-group weekly brief for the UTC Sun→Sat window selected by the service (Sunday–Friday → the previous, completed week; Saturday → the current, not-yet-completed week). Responds 202 with the brief in the \"generating\" state; the source gather + LLM call run out-of-band via a durable consumer. Clients poll GET /current to observe the terminal \"generated\" or \"error\" state — a window with no activity or an AI failure finalizes the brief as \"error\" rather than a synchronous error response. Per-committee/per-week throttle: 2 fresh generations and 3 regenerations, enforced synchronously. Returns 409 when an edited brief exists and force is not set, 429 when the throttle is exhausted.","operationId":"committee-service#generate-weekly-brief","parameters":[{"name":"v","in":"query","description":"Version of the API","allowEmptyValue":true,"schema":{"type":"string","description":"Version of the API","example":"1","enum":["1"]},"example":"1"},{"name":"uid","in":"path","description":"Committee UID -- v2 uid, not related to v1 id directly","required":true,"schema":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateWeeklyBriefRequestBody"},"example":{"force":false}}}},"responses":{"202":{"description":"Accepted response.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefGenerateResult"},"example":{"brief":{"brief_text":"sub","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"0jc","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}}},"400":{"description":"BadRequest: Bad request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BadRequestError"},"example":{"message":"The request was invalid."}}}},"403":{"description":"Forbidden: Caller lacks writer access on the committee","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForbiddenError"},"example":{"message":"You do not have permission to perform this action."}}}},"404":{"description":"NotFound: Committee not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"},"example":{"message":"The resource was not found."}}}},"409":{"description":"EditedBriefExists: An edited brief exists and force is not set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefEditedExistsError"},"example":{"code":"edited_brief_exists","revision":7}}}},"429":{"description":"ThrottleExceeded: Per-committee/per-week generation or regeneration limit exhausted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottleExceededError"},"example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}}},"500":{"description":"InternalServerError: Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"},"example":{"message":"An internal server error occurred."}}}},"503":{"description":"ServiceUnavailable: Service unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"},"example":{"message":"The service is unavailable."}}}}},"security":[{"jwt_header_Authorization":[]}]}}},"components":{"schemas":{"AcceptInviteOptionalBody":{"type":"object","properties":{"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"description":"Optional accept-invite request body.","example":{"organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}}},"ApproveApplicationRequestBody":{"type":"object","properties":{"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000}},"example":{"reviewer_notes":"Approved based on contribution history."}},"BadRequestError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The request was invalid."}},"example":{"message":"The request was invalid."},"required":["message"]},"CommitteeApplicationWithReadonlyAttributes":{"type":"object","properties":{"applicant_email":{"type":"string","description":"Applicant email address","example":"user@example.com"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"message":{"type":"string","description":"Application message from the applicant","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000},"reviewer_notes":{"type":"string","description":"Notes from the reviewer","example":"Approved based on contribution history.","maxLength":2000},"status":{"type":"string","description":"Application status","default":"pending","example":"pending","enum":["pending","approved","rejected"]},"uid":{"type":"string","description":"Application UID","example":"b2c3d4e5-f6a7-8901-bcde-f12345678901","format":"uuid"}},"description":"A representation of a committee application with readonly attributes.","example":{"applicant_email":"user@example.com","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","message":"I would like to join the TSC to contribute my expertise.","reviewer_notes":"Approved based on contribution history.","status":"pending","uid":"b2c3d4e5-f6a7-8901-bcde-f12345678901"}},"CommitteeBase":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees without sub-objects.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"}},"CommitteeBaseWithReadonlyAttributes":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_name":{"type":"string","description":"The name of the project this committee belongs to","example":"Linux Foundation Project","maxLength":100},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"description":"A base representation of LFX committees with readonly attributes.","example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_name":"Linux Foundation Project","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org"}},"CommitteeDocumentWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"content_type":{"type":"string","description":"MIME type of the file","example":"application/pdf"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"description":{"type":"string","description":"Optional description","example":"Technical architecture decisions for Q1 2025","maxLength":2000},"file_name":{"type":"string","description":"Original file name","example":"architecture-decisions-q1-2025.pdf","maxLength":500},"file_size":{"type":"integer","description":"File size in bytes","example":204800,"format":"int64","minimum":0},"folder_uid":{"type":"string","description":"Optional folder UID this document belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500},"uid":{"type":"string","description":"Document UID","example":"d1e2f3a4-b5c6-7890-defa-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"uploaded_by_username":{"type":"string","description":"LF username of the uploader (auto-populated from JWT)","example":"alexlee"}},"description":"A file document associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","content_type":"application/pdf","created_at":"2023-01-15T10:30:00Z","description":"Technical architecture decisions for Q1 2025","file_name":"architecture-decisions-q1-2025.pdf","file_size":204800,"folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record","uid":"d1e2f3a4-b5c6-7890-defa-123456789012","updated_at":"2023-06-20T14:45:30Z","uploaded_by_username":"alexlee"}},"CommitteeFull":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A full representation of LFX committees with sub-objects.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeFullWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"has_mailing_list":{"type":"boolean","description":"Whether the committee has any associated mailing lists","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"sso_group_name":{"type":"string","description":"The name of the SSO group - read-only","example":"lfx-committee-group"},"total_members":{"type":"integer","description":"The total number of members in this committee","example":15,"format":"int64","minimum":0},"total_voting_repos":{"type":"integer","description":"The total number of repositories with voting permissions for this committee","example":3,"format":"int64","minimum":0},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A complete representation of LFX committees with base, settings and readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"has_mailing_list":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"sso_group_name":"lfx-committee-group","total_members":15,"total_voting_repos":3,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeInviteWithReadonlyAttributes":{"type":"object","properties":{"committee_name":{"type":"string","description":"Name of the committee at the time the invite was created","example":"Technical Steering Committee"},"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"invitee_email":{"type":"string","description":"Email of the invited person","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"organization_required":{"type":"boolean","description":"Whether the invitee must supply an organization when accepting. True when the committee has voting enabled or requires a business email.","example":false},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"},"status":{"type":"string","description":"Invite status","default":"pending","example":"pending","enum":["pending","accepted","declined","revoked"]},"uid":{"type":"string","description":"Invite UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","format":"uuid"}},"description":"A representation of a committee invite with readonly attributes.","example":{"committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"organization_required":false,"role":"None","status":"pending","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"}},"CommitteeLinkFolderWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who created the folder (auto-populated from JWT)","example":"alexlee"},"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200},"uid":{"type":"string","description":"Folder UID","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"}},"description":"A folder for organizing committee links.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","name":"Meeting Notes","uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","updated_at":"2023-06-20T14:45:30Z"}},"CommitteeLinkWithReadonlyAttributes":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"created_by_username":{"type":"string","description":"LF username of the user who added the link (auto-populated from JWT)","example":"alexlee"},"description":{"type":"string","description":"Optional description","example":"Confluence wiki — architecture decisions log","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID this link belongs to","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"uid":{"type":"string","description":"Link UID","example":"c1d2e3f4-a5b6-7890-cdef-123456789012","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"description":"A URL link associated with a committee.","example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","created_by_username":"alexlee","description":"Confluence wiki — architecture decisions log","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Technical Architecture Decision Records","uid":"c1d2e3f4-a5b6-7890-cdef-123456789012","updated_at":"2023-06-20T14:45:30Z","url":"https://confluence.example.com/architecture-decisions"}},"CommitteeMemberBase":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A base representation of committee members.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFull":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with all attributes.","example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeMemberFullWithReadonlyAttributes":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"description":"A complete representation of committee members with readonly attributes.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","updated_at":"2023-06-20T14:45:30Z","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"CommitteeSettings":{"type":"object","properties":{"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false}},"description":"A representation of LF Committee settings.","example":{"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false}},"CommitteeSettingsWithReadonlyAttributes":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"description":"A representation of LF Committee settings with readonly attributes.","example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"created_at":"2023-01-15T10:30:00Z","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","updated_at":"2023-06-20T14:45:30Z","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"CommitteeUser":{"type":"object","properties":{"avatar":{"type":"string","description":"URL to the user's avatar image","example":"https://example.com/avatar.jpg"},"email":{"type":"string","description":"The user's email address","example":"alice.johnson@example.com"},"name":{"type":"string","description":"Display name of the user","example":"Alice Johnson"},"username":{"type":"string","description":"User identifier (LF ID / sub)","example":"alicejohnson789"}},"description":"A user object stored in writers or auditors lists.","example":{"avatar":"https://example.com/avatar.jpg","email":"alice.johnson@example.com","name":"Alice Johnson","username":"alicejohnson789"}},"ConflictError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource already exists."}},"example":{"message":"The resource already exists."},"required":["message"]},"CreateCommitteeLinkFolderRequestBody":{"type":"object","properties":{"name":{"type":"string","description":"Folder name","example":"Meeting Notes","maxLength":200}},"example":{"name":"Meeting Notes"},"required":["name"]},"CreateCommitteeLinkRequestBody":{"type":"object","properties":{"description":{"type":"string","description":"Optional description","example":"iso","maxLength":2000},"folder_uid":{"type":"string","description":"Optional folder UID to place this link in","example":"db7cf23a-c321-4c85-9bf2-38e82505f74c","format":"uuid"},"name":{"type":"string","description":"Display name for the link","example":"Technical Architecture Decision Records","maxLength":500},"url":{"type":"string","description":"The URL this link points to","example":"https://confluence.example.com/architecture-decisions","maxLength":2048}},"example":{"description":"c2z","folder_uid":"38fa566b-a0d8-46b6-9436-b399dd073230","name":"Technical Architecture Decision Records","url":"https://confluence.example.com/architecture-decisions"},"required":["name","url"]},"CreateCommitteeMemberRequestBody":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"linkedin_profile":{"type":"string","description":"LinkedIn profile URL","example":"https://www.linkedin.com/in/johndoe","format":"uri","pattern":"^(https?://)?([a-z]{2,3}\\.)?linkedin\\.com/.*$"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"object","properties":{"end_date":{"type":"string","description":"Role end date","example":"2024-12-31","format":"date"},"name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"start_date":{"type":"string","description":"Role start date","example":"2023-01-01","format":"date"}},"description":"Committee role information","example":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"}},"status":{"type":"string","description":"Member status","default":"Active","example":"Active","enum":["Active","Inactive"]},"username":{"type":"string","description":"User's LF ID","example":"user123","maxLength":100},"voting":{"type":"object","properties":{"end_date":{"type":"string","description":"Voting end date","example":"2024-12-31","format":"date"},"start_date":{"type":"string","description":"Voting start date","example":"2023-01-01","format":"date"},"status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"Voting information for the committee member","example":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}}},"example":{"appointed_by":"Community","email":"user@example.com","first_name":"John","job_title":"Chief Technology Officer","last_name":"Doe","linkedin_profile":"https://www.linkedin.com/in/johndoe","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":{"end_date":"2024-12-31","name":"Chair","start_date":"2023-01-01"},"status":"Active","username":"user123","voting":{"end_date":"2024-12-31","start_date":"2023-01-01","status":"Voting Rep"}},"required":["email"]},"CreateCommitteeRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","mailing_list":"tsc@lists.example.org","member_visibility":"hidden","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"show_meeting_attendees":false,"sso_group_enabled":true,"website":"https://committee.example.org","writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["name","category","project_uid"]},"CreateInviteRequestBody":{"type":"object","properties":{"invitee_email":{"type":"string","description":"Email of the person to invite","example":"invitee@example.com","format":"email"},"organization":{"type":"object","properties":{"id":{"type":"string","description":"Organization ID","example":"org-123456"},"name":{"type":"string","description":"Organization name","example":"The Linux Foundation","maxLength":200},"website":{"type":"string","description":"Organization website URL","example":"https://linuxfoundation.org","format":"uri"}},"description":"Organization information for the committee member","example":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"}},"role":{"type":"string","description":"Suggested role for the invitee","example":"None"}},"example":{"invitee_email":"invitee@example.com","organization":{"id":"org-123456","name":"The Linux Foundation","website":"https://linuxfoundation.org"},"role":"None"},"required":["invitee_email"]},"ForbiddenError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"You do not have permission to perform this action."}},"description":"Forbidden","example":{"message":"You do not have permission to perform this action."},"required":["message"]},"GenerateWeeklyBriefRequestBody":{"type":"object","properties":{"force":{"type":"boolean","description":"Force regeneration even if an edited brief exists","default":false,"example":false}},"example":{"force":false}},"GroupWeeklyBriefCurrentResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by GET /committees/{uid}/weekly-briefs/current. On a miss, both attributes are null and the response status is 200.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefEditedExistsError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"edited_brief_exists","enum":["edited_brief_exists"]},"revision":{"type":"integer","description":"Current revision of the edited brief","example":7,"format":"int64"}},"description":"Returned when an edited brief already exists for this window and force was not set.","example":{"code":"edited_brief_exists","revision":7},"required":["code","revision"]},"GroupWeeklyBriefGenerateResult":{"type":"object","properties":{"brief":{"$ref":"#/components/schemas/GroupWeeklyBriefWithReadonlyAttributes"},"throttle":{"$ref":"#/components/schemas/GroupWeeklyBriefThrottle"}},"description":"Envelope returned by POST /committees/{uid}/weekly-briefs/generate. Both brief and throttle are populated on success.","example":{"brief":{"brief_text":"ef5","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"},"throttle":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}}},"GroupWeeklyBriefRevisionConflictError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"revision_conflict","enum":["revision_conflict"]},"revision":{"type":"integer","description":"Current server-side revision of the brief","example":8,"format":"int64"}},"description":"Returned when the caller's revision token does not match the brief's current revision.","example":{"code":"revision_conflict","revision":8},"required":["code","revision"]},"GroupWeeklyBriefSourceRef":{"type":"object","properties":{"excerpt":{"type":"string","description":"Excerpt consumed by the generator","example":"hnl","maxLength":5000},"id":{"type":"string","description":"Source-system identifier (URL or UID)","example":"https://meet.example.org/abc123"},"kind":{"type":"string","description":"Source category (meeting, mailing-list, doc, …)","example":"meeting"},"title":{"type":"string","description":"Short human label for the source","example":"2026-05-12 weekly sync"}},"description":"Reference to a source document considered by the weekly-brief generator.","example":{"excerpt":"0k4","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}},"GroupWeeklyBriefThrottle":{"type":"object","properties":{"generates_limit":{"type":"integer","description":"Maximum fresh generations allowed in this window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Number of fresh generations used in this window","example":0,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Maximum regenerations allowed in this window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Number of regenerations used in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Per-committee/per-week regeneration throttle counters.","example":{"generates_limit":2,"generates_used":0,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"}},"GroupWeeklyBriefThrottleExceededError":{"type":"object","properties":{"code":{"type":"string","description":"Stable machine code","example":"throttle_exceeded","enum":["throttle_exceeded"]},"generates_limit":{"type":"integer","description":"Fresh-generation limit per window","example":2,"format":"int64","minimum":0},"generates_used":{"type":"integer","description":"Fresh generations consumed in this window","example":2,"format":"int64","minimum":0},"regenerations_limit":{"type":"integer","description":"Regeneration limit per window","example":3,"format":"int64","minimum":0},"regenerations_used":{"type":"integer","description":"Regenerations consumed in this window","example":0,"format":"int64","minimum":0},"window_resets_at":{"type":"string","description":"Timestamp when the window resets (next UTC Sunday 00:00:00)","example":"2026-05-24T00:00:00Z","format":"date-time"}},"description":"Returned when the per-committee/per-week generation or regeneration limit is exhausted.","example":{"code":"throttle_exceeded","generates_limit":2,"generates_used":2,"regenerations_limit":3,"regenerations_used":0,"window_resets_at":"2026-05-24T00:00:00Z"},"required":["code","generates_used","generates_limit","regenerations_used","regenerations_limit","window_resets_at"]},"GroupWeeklyBriefWithReadonlyAttributes":{"type":"object","properties":{"brief_text":{"type":"string","description":"Brief body markdown text","example":"ibj","maxLength":20000},"committee_uid":{"type":"string","description":"Committee UID this brief belongs to","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"created_at":{"type":"string","description":"The timestamp when the resource was created (read-only)","example":"2023-01-15T10:30:00Z","format":"date-time"},"last_edited_at":{"type":"string","description":"Timestamp of the most recent chair edit via PUT /current; absent if never edited","example":"2026-05-18T14:03:00Z","format":"date-time"},"last_edited_by":{"type":"string","description":"LFX username of the caller who last edited the brief; absent if never edited","example":"jsmith"},"model":{"type":"string","description":"AI model used by the generator","example":"fake"},"private_source_present":{"type":"boolean","description":"Whether any non-public source was used","example":false},"prompt_version":{"type":"string","description":"Prompt version used by the generator","example":"v1"},"regeneration_count":{"type":"integer","description":"Number of regenerations triggered in this window","example":0,"format":"int64","minimum":0},"revision":{"type":"integer","description":"Optimistic-concurrency token. Echo this back in PUT /current; a stale value yields 409.","example":7,"format":"int64","minimum":1},"source_refs":{"type":"array","items":{"$ref":"#/components/schemas/GroupWeeklyBriefSourceRef"},"description":"Sources considered by the generator","example":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}]},"state":{"type":"string","description":"Lifecycle state","example":"generated","enum":["empty","generating","generated","edited","approved","error"]},"uid":{"type":"string","description":"Brief UID","example":"a1b2c3d4-e5f6-7890-abcd-ef1234567890"},"updated_at":{"type":"string","description":"The timestamp when the resource was last updated (read-only)","example":"2023-06-20T14:45:30Z","format":"date-time"},"window_end":{"type":"string","description":"Inclusive UTC end of the window — Saturday 23:59:59.999999999 (nanosecond precision)","example":"2026-05-16T23:59:59.999999999Z","format":"date-time"},"window_start":{"type":"string","description":"UTC Sunday 00:00:00 marking the start of the window","example":"2026-05-10T00:00:00Z","format":"date-time"}},"description":"A working-group weekly brief for a single committee and Sun→Sat window.","example":{"brief_text":"0xr","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","created_at":"2023-01-15T10:30:00Z","last_edited_at":"2026-05-18T14:03:00Z","last_edited_by":"jsmith","model":"fake","private_source_present":false,"prompt_version":"v1","regeneration_count":0,"revision":7,"source_refs":[{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"},{"excerpt":"22l","id":"https://meet.example.org/abc123","kind":"meeting","title":"2026-05-12 weekly sync"}],"state":"generated","uid":"a1b2c3d4-e5f6-7890-abcd-ef1234567890","updated_at":"2023-06-20T14:45:30Z","window_end":"2026-05-16T23:59:59.999999999Z","window_start":"2026-05-10T00:00:00Z"}},"InternalServerError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"An internal server error occurred."}},"example":{"message":"An internal server error occurred."},"required":["message"]},"NotFoundError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The resource was not found."}},"example":{"message":"The resource was not found."},"required":["message"]},"OrgCommitteeSeat":{"type":"object","properties":{"appointed_by":{"type":"string","description":"How the member was appointed","default":"None","example":"Community","enum":["Community","Membership Entitlement","Vote of End User Member Class","Vote of TSC Committee","Vote of TAC Committee","Vote of Academic Member Class","Vote of Lab Member Class","Vote of Marketing Committee","Vote of Governing Board","Vote of General Member Class","Vote of End User Committee","Vote of TOC Committee","Vote of Gold Member Class","Vote of Silver Member Class","Vote of Strategic Membership Class","None"]},"committee_category":{"type":"string","description":"The category of the committee this member belongs to","example":"Board","maxLength":100},"committee_name":{"type":"string","description":"The name of the committee this member belongs to","example":"Technical Steering Committee","maxLength":100},"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"is_org_editable":{"type":"boolean","description":"Whether the org can reassign this seat (appointed_by == Membership Entitlement)","example":true},"job_title":{"type":"string","description":"Job title at organization","example":"Chief Technology Officer","maxLength":200},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100},"organization_id":{"type":"string","description":"Holding organization SFID","example":"001B000000IqhSLIAZ"},"project_slug":{"type":"string","description":"The slug of the project this committee belongs to","example":"example-foundation"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"reason":{"type":"string","description":"Why the seat is not editable (empty when editable)","example":"This seat is foundation-controlled."},"role_name":{"type":"string","description":"Committee role name","default":"None","example":"Chair","enum":["Chair","Developer Seat","TAC/TOC Representative","Director","Lead","None","Secretary","Technical Lead","Treasurer","Vice Chair","LF Staff"]},"uid":{"type":"string","description":"Committee member UID -- v2 uid, not related to v1 id directly","example":"2200b646-fbb2-4de7-ad80-fd195a874baf","format":"uuid"},"voting_status":{"type":"string","description":"Voting status","default":"None","example":"Voting Rep","enum":["Alternate Voting Rep","Observer","Voting Rep","Emeritus","None"]}},"description":"An organization's committee seat for the Org Lens Board \u0026 Committee tab.","example":{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},"required":["uid","committee_uid","committee_name","committee_category","first_name","last_name","email","role_name","voting_status","appointed_by","organization_id","is_org_editable"]},"OrgCommitteeSeatPage":{"type":"object","properties":{"page_token":{"type":"string","description":"Opaque cursor for the next page; empty when there are no more results","example":"eyJvIjoxMDB9"},"seats":{"type":"array","items":{"$ref":"#/components/schemas/OrgCommitteeSeat"},"description":"The committee seats in this page","example":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]}},"description":"A page of an organization's committee seats with an optional next-page cursor.","example":{"page_token":"eyJvIjoxMDB9","seats":[{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"},{"appointed_by":"Community","committee_category":"Board","committee_name":"Technical Steering Committee","committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","is_org_editable":true,"job_title":"Chief Technology Officer","last_name":"Doe","organization_id":"001B000000IqhSLIAZ","project_slug":"example-foundation","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","reason":"This seat is foundation-controlled.","role_name":"Chair","uid":"2200b646-fbb2-4de7-ad80-fd195a874baf","voting_status":"Voting Rep"}]},"required":["seats"]},"ReassignOrgCommitteeSeatRequestBody":{"type":"object","properties":{"committee_uid":{"type":"string","description":"Committee UID -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"email":{"type":"string","description":"Primary email address","example":"user@example.com","format":"email"},"first_name":{"type":"string","description":"First name","example":"John","maxLength":100},"last_name":{"type":"string","description":"Last name","example":"Doe","maxLength":100}},"example":{"committee_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","email":"user@example.com","first_name":"John","last_name":"Doe"},"required":["committee_uid","first_name","last_name","email"]},"ServiceUnavailableError":{"type":"object","properties":{"message":{"type":"string","description":"Error message","example":"The service is unavailable."}},"example":{"message":"The service is unavailable."},"required":["message"]},"SubmitApplicationRequestBody":{"type":"object","properties":{"message":{"type":"string","description":"Application message","example":"I would like to join the TSC to contribute my expertise.","maxLength":2000}},"example":{"message":"I would like to join the TSC to contribute my expertise."}},"UpdateCommitteeBaseRequestBody":{"type":"object","properties":{"calendar":{"type":"object","properties":{"public":{"type":"boolean","description":"Whether the committee calendar is publicly visible","default":false,"example":true}},"description":"Settings related to the committee calendar","example":{"public":true}},"category":{"type":"string","description":"The category of the committee","example":"Technical Steering Committee","enum":["Ambassador","Board","Code of Conduct","Committers","Expert Group","Finance Committee","Government Advisory Council","Legal Committee","Maintainers","Marketing Committee/Sub Committee","Marketing Mailing List","Marketing Oversight Committee/Marketing Advisory Committee","Other","Product Security","Special Interest Group","Technical Advisory Committee","Technical Mailing List","Technical Oversight Committee","Technical Steering Committee","Working Group"]},"chat_channel":{"type":"string","description":"The chat channel URL or identifier for the committee","example":"https://slack.example.org/channels/tsc","maxLength":500},"description":{"type":"string","description":"The description of the committee","example":"Main technical oversight committee for the project","maxLength":2000},"display_name":{"type":"string","description":"The display name of the committee","example":"TSC Committee Calendar","maxLength":100},"enable_voting":{"type":"boolean","description":"Whether voting is enabled for this committee","default":false,"example":true},"join_mode":{"type":"string","description":"How new members can join this committee","default":"invite_only","example":"open","enum":["open","invite_only","application","closed"]},"mailing_list":{"type":"string","description":"The mailing list email address for the committee","example":"tsc@lists.example.org","format":"email"},"name":{"type":"string","description":"The name of the committee","example":"Technical Steering Committee","maxLength":100},"parent_uid":{"type":"string","description":"The UID of the parent committee -- v2 uid, not related to v1 id directly, should be empty if there is none","example":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","format":"uuid"},"project_uid":{"type":"string","description":"Project UID this committee belongs to -- v2 uid, not related to v1 id directly","example":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","format":"uuid"},"public":{"type":"boolean","description":"General committee visibility/access permissions","default":false,"example":true},"requires_review":{"type":"boolean","description":"Whether this committee is expected to be reviewed","default":false,"example":true},"sso_group_enabled":{"type":"boolean","description":"Whether SSO group integration is enabled","default":false,"example":true},"website":{"type":"string","description":"The website URL of the committee","example":"https://committee.example.org","format":"uri","pattern":"^(https?://)?[^\\s/$.?#].[^\\s]*$"}},"example":{"calendar":{"public":true},"category":"Technical Steering Committee","chat_channel":"https://slack.example.org/channels/tsc","description":"Main technical oversight committee for the project","display_name":"TSC Committee Calendar","enable_voting":true,"join_mode":"open","mailing_list":"tsc@lists.example.org","name":"Technical Steering Committee","parent_uid":"90b147f2-7cdd-157a-a2f4-9d4a567123fc","project_uid":"7cad5a8d-19d0-41a4-81a6-043453daf9ee","public":true,"requires_review":true,"sso_group_enabled":true,"website":"https://committee.example.org"},"required":["name","category","project_uid"]},"UpdateCommitteeSettingsRequestBody":{"type":"object","properties":{"auditors":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can audit this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}]},"business_email_required":{"type":"boolean","description":"Whether business email is required for committee members","default":false,"example":false},"last_reviewed_at":{"type":"string","description":"The timestamp when the committee was last reviewed in RFC3339 format","example":"2025-08-04T09:00:00Z","format":"date-time"},"last_reviewed_by":{"type":"string","description":"The user ID who last reviewed this committee","example":"user_id_12345"},"member_visibility":{"type":"string","description":"Dertermines the visibility level of members profiles to other members of the same committee","default":"hidden","example":"hidden","enum":["hidden","basic_profile"]},"show_meeting_attendees":{"type":"boolean","description":"Determines the default show_meeting_attendees setting on meetings this committee is connected to","default":false,"example":false},"writers":{"type":"array","items":{"$ref":"#/components/schemas/CommitteeUser"},"description":"Users who can edit/modify this committee","example":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]}},"example":{"auditors":[{"avatar":"https://example.com/avatar.jpg","email":"john@example.com","name":"John Doe","username":"auditor_user_id1"}],"business_email_required":false,"last_reviewed_at":"2025-08-04T09:00:00Z","last_reviewed_by":"user_id_12345","member_visibility":"hidden","show_meeting_attendees":false,"writers":[{"avatar":"https://example.com/avatar.jpg","email":"alice@example.com","name":"Alice Johnson","username":"manager_user_id1"}]},"required":["business_email_required"]},"UpdateCurrentWeeklyBriefRequestBody":{"type":"object","properties":{"brief_text":{"type":"string","description":"Edited brief body markdown text","example":"## This week\n\n- Shipped the thing.","maxLength":20000},"revision":{"type":"integer","description":"Optimistic-concurrency token from the brief being edited (GET /current)","example":7,"format":"int64","minimum":1}},"example":{"brief_text":"## This week\n\n- Shipped the thing.","revision":7},"required":["brief_text","revision"]},"UploadCommitteeDocumentRequestBody":{"type":"object","properties":{"content_type":{"type":"string","description":"MIME type of the uploaded file","example":"Qui et sint voluptates expedita quod dolor."},"description":{"type":"string","description":"Optional description","example":"rr3","maxLength":2000},"file":{"type":"string","description":"File content","example":"VmVyaXRhdGlzIGRlc2VydW50Lg==","format":"binary"},"file_name":{"type":"string","description":"Original file name (from the uploaded file part)","example":"Atque et aut ipsam aut enim dicta."},"folder_uid":{"type":"string","description":"Optional folder UID to place this document in","example":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","format":"uuid"},"name":{"type":"string","description":"Display name for the document","example":"Architecture Decision Record","maxLength":500}},"example":{"content_type":"Numquam hic et totam quam autem quaerat.","description":"n1a","file":"QXQgcXVpIG5paGlsIGV4ZXJjaXRhdGlvbmVtIGRvbG9yIGEgcXVpLg==","file_name":"Eos provident temporibus quis eos velit facere.","folder_uid":"f1e2d3c4-b5a6-7890-fedc-ba9876543210","name":"Architecture Decision Record"},"required":["name","file_name","content_type","file"]}},"securitySchemes":{"jwt_header_Authorization":{"type":"http","description":"Heimdall authorization","scheme":"bearer"}}},"tags":[{"name":"committee-service","description":"Committee management service"}]} \ No newline at end of file diff --git a/gen/http/openapi3.yaml b/gen/http/openapi3.yaml index 9d0f6b5f..9178db5d 100644 --- a/gen/http/openapi3.yaml +++ b/gen/http/openapi3.yaml @@ -2022,7 +2022,7 @@ paths: example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 requestBody: description: Optional JSON body - required: true + required: false content: application/json: schema: From 15401696765059c533c3bf9d6574c3eb9ee0b929 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Mon, 22 Jun 2026 08:55:55 -0700 Subject: [PATCH 7/8] fix(review): preserve OrganizationRequired on GetSettings failure in enrichInviteFromCommittee MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When GetSettings fails, the previous code evaluated: invite.OrganizationRequired = cb.EnableVoting || (settings != nil && settings.BusinessEmailRequired) With settings == nil this collapses to cb.EnableVoting only, silently clobbering a correctly-stored OrganizationRequired=true for a committee where BusinessEmailRequired is true but EnableVoting is false. On the Accept/Decline/Revoke paths the wrong value would then be persisted to KV and republished to the index; on GetInvite it would feed the wrong value to the accept-form org prompt. Fix: return early on settings error so the existing invite value is preserved — consistent with the GetBase early-return above it and with the reindex tool's deliberate "don't corrupt correctly-set values" guard. Also updated the doc comment to accurately reflect both early-return paths. Adds TestGetInvite_SettingsFailurePreservesOrganizationRequired to cover this exact regression path. Resolves 1 review thread from @audigregorie. Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- .../service/committee_service.go | 11 ++++-- .../service/committee_service_test.go | 37 +++++++++++++++++++ 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 71ea8d25..1c62885e 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -1329,9 +1329,9 @@ func (s *committeeServicesrvc) resolveCallerEmail(ctx context.Context) (string, } // enrichInviteFromCommittee populates invite fields derived from the committee. -// It sets CommitteeName when missing and always refreshes OrganizationRequired from -// the committee's current settings (voting enabled or business email required). -// Best-effort: errors are logged and the invite is left unchanged on failure. +// It sets CommitteeName when missing and refreshes OrganizationRequired from the +// committee's current settings (voting enabled or business email required). +// Best-effort: on any error the invite is left unchanged and the error is logged. func (s *committeeServicesrvc) enrichInviteFromCommittee(ctx context.Context, invite *model.CommitteeInvite, committeeUID string) { cb, _, err := s.storage.GetBase(ctx, committeeUID) if err != nil { @@ -1344,10 +1344,13 @@ func (s *committeeServicesrvc) enrichInviteFromCommittee(ctx context.Context, in } settings, _, settingsErr := s.storage.GetSettings(ctx, committeeUID) if settingsErr != nil { + // Leave OrganizationRequired unchanged on a transient settings failure rather than + // clobbering a correctly-stored value with one derived from nil settings. slog.WarnContext(ctx, "enrichInviteFromCommittee: failed to get committee settings", "committee_uid", committeeUID, "error", settingsErr) + return } - invite.OrganizationRequired = cb.EnableVoting || (settings != nil && settings.BusinessEmailRequired) + invite.OrganizationRequired = cb.EnableVoting || settings.BusinessEmailRequired } // publishInviteIndexerMessage publishes an indexer message for invite operations. diff --git a/cmd/committee-api/service/committee_service_test.go b/cmd/committee-api/service/committee_service_test.go index aeed9324..a4308cdc 100644 --- a/cmd/committee-api/service/committee_service_test.go +++ b/cmd/committee-api/service/committee_service_test.go @@ -688,6 +688,43 @@ func TestGetInvite(t *testing.T) { } } +func TestGetInvite_SettingsFailurePreservesOrganizationRequired(t *testing.T) { + // When GetSettings fails (committee has no settings), enrichInviteFromCommittee must + // leave the existing OrganizationRequired value intact rather than clobbering it with + // a value derived from nil settings (which would incorrectly evaluate to false). + svc, _, repo := setupServiceTestWithRepo() + + // Add a committee with no settings — GetSettings will return NotFound. + repo.AddCommittee(&model.Committee{ + CommitteeBase: model.CommitteeBase{ + UID: "no-settings-committee", + ProjectUID: "proj-1", + Name: "No Settings Committee", + EnableVoting: false, + }, + CommitteeSettings: nil, + }) + // Seed an invite with OrganizationRequired already set to true. + repo.AddCommitteeInvite(&model.CommitteeInvite{ + UID: "invite-no-settings", + CommitteeUID: "no-settings-committee", + InviteeEmail: "test@example.com", + Status: "pending", + OrganizationRequired: true, + }) + + result, err := svc.GetInvite(context.Background(), &committeeservice.GetInvitePayload{ + UID: "no-settings-committee", + InviteUID: "invite-no-settings", + }) + + require.NoError(t, err) + require.NotNil(t, result) + // OrganizationRequired must be preserved despite the settings failure. + require.NotNil(t, result.OrganizationRequired) + assert.True(t, *result.OrganizationRequired, "settings failure must not clobber a correctly-stored OrganizationRequired=true") +} + func TestCreateInvite(t *testing.T) { tests := []struct { name string From f271a30f2daedfe843db3d8bca084b54c2de8da4 Mon Sep 17 00:00:00 2001 From: Andres Tobon Date: Mon, 22 Jun 2026 09:12:53 -0700 Subject: [PATCH 8/8] fix(review): guard OrganizationRequired updates on settings fetch success in reindex-invites MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three related fixes in cmd/committee-cli/commands/sync/reindex_invites.go, plus a doc comment correction in cmd/committee-api/service/committee_service.go. reindex_invites.go: - Add settingsFetched bool to committeeSnapshot. lookupCommittee now only sets settingsFetched when GetSettings returns without an error, so a transient settings failure cannot cause OrganizationRequired to be clobbered with a value derived from nil/zero settings. - Gate the invite-loop OrganizationRequired update on snap.settingsFetched so the existing value is preserved when settings are unavailable. - Gate the KV backfill freshInvite.OrganizationRequired assignment on snap.settingsFetched for the same reason — mirrors the guard the API-side enrichInviteFromCommittee already applies. - When GetSettings returns (nil, 0, nil) (no settings configured, no error), treat as a successful fetch: compute organizationRequired as base.EnableVoting only (no BusinessEmailRequired contribution). committee_service.go: - Update enrichInviteFromCommittee doc comment to accurately describe the partial-mutation behaviour: a GetBase failure leaves the invite fully unchanged; a GetSettings failure leaves OrganizationRequired unchanged but CommitteeName may already have been backfilled. The previous comment ("on any error the invite is left unchanged") was inaccurate. Resolves 4 review threads from copilot-pull-request-reviewer. Generated with [Claude Code](https://claude.ai/code) Signed-off-by: Andres Tobon --- .../service/committee_service.go | 4 +++- .../commands/sync/reindex_invites.go | 20 +++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/cmd/committee-api/service/committee_service.go b/cmd/committee-api/service/committee_service.go index 1c62885e..fe039e29 100644 --- a/cmd/committee-api/service/committee_service.go +++ b/cmd/committee-api/service/committee_service.go @@ -1331,7 +1331,9 @@ func (s *committeeServicesrvc) resolveCallerEmail(ctx context.Context) (string, // enrichInviteFromCommittee populates invite fields derived from the committee. // It sets CommitteeName when missing and refreshes OrganizationRequired from the // committee's current settings (voting enabled or business email required). -// Best-effort: on any error the invite is left unchanged and the error is logged. +// Best-effort: a GetBase failure leaves the invite fully unchanged. A GetSettings +// failure leaves OrganizationRequired unchanged (CommitteeName may already have +// been backfilled). All errors are logged. func (s *committeeServicesrvc) enrichInviteFromCommittee(ctx context.Context, invite *model.CommitteeInvite, committeeUID string) { cb, _, err := s.storage.GetBase(ctx, committeeUID) if err != nil { diff --git a/cmd/committee-cli/commands/sync/reindex_invites.go b/cmd/committee-cli/commands/sync/reindex_invites.go index b76917e9..4a02054d 100644 --- a/cmd/committee-cli/commands/sync/reindex_invites.go +++ b/cmd/committee-cli/commands/sync/reindex_invites.go @@ -84,6 +84,7 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte name string organizationRequired bool fetched bool + settingsFetched bool } committeeCache := make(map[string]committeeSnapshot) @@ -101,8 +102,17 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte } snap.fetched = true snap.name = base.Name - settings, _, _ := rc.CommitteeReader.GetSettings(ctx, committeeUID) - snap.organizationRequired = base.EnableVoting || (settings != nil && settings.BusinessEmailRequired) + settings, _, settingsErr := rc.CommitteeReader.GetSettings(ctx, committeeUID) + if settingsErr != nil { + // Leave OrganizationRequired unchanged rather than clobbering a correctly-stored + // value with one derived from a transient settings failure. + slog.WarnContext(ctx, "reindex-invites: failed to fetch committee settings — OrganizationRequired will not be updated", + "committee_uid", committeeUID, "error", settingsErr) + } else { + snap.settingsFetched = true + businessEmailRequired := settings != nil && settings.BusinessEmailRequired + snap.organizationRequired = base.EnableVoting || businessEmailRequired + } committeeCache[committeeUID] = snap return snap } @@ -118,7 +128,7 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte invite.CommitteeName = snap.name needsKVUpdate = true } - if invite.OrganizationRequired != snap.organizationRequired { + if snap.settingsFetched && invite.OrganizationRequired != snap.organizationRequired { invite.OrganizationRequired = snap.organizationRequired needsKVUpdate = true } @@ -151,7 +161,9 @@ func (s *reindexInvitesSubcommand) Run(ctx context.Context, rc commands.RunConte if freshInvite.CommitteeName == "" && snap.name != "" { freshInvite.CommitteeName = snap.name } - freshInvite.OrganizationRequired = snap.organizationRequired + if snap.settingsFetched { + freshInvite.OrganizationRequired = snap.organizationRequired + } if updateErr := rc.CommitteeInviteWriter.UpdateInvite(ctx, freshInvite, rev); updateErr != nil { slog.WarnContext(ctx, "failed to update invite in NATS KV", "error", updateErr,