syntax = "v1" type ( MemberMeData { TenantID string `json:"tenant_id"` UID string `json:"uid"` Email string `json:"email"` EmailVerified bool `json:"email_verified"` DisplayName string `json:"display_name,omitempty"` Avatar string `json:"avatar,omitempty"` Phone string `json:"phone,omitempty"` Language string `json:"language,omitempty"` Currency string `json:"currency,omitempty"` Status string `json:"status"` Origin string `json:"origin"` Roles []string `json:"roles,omitempty"` BusinessEmail string `json:"business_email,omitempty"` BusinessEmailVerified bool `json:"business_email_verified"` BusinessPhone string `json:"business_phone,omitempty"` BusinessPhoneVerified bool `json:"business_phone_verified"` CreateAt int64 `json:"create_at"` UpdateAt int64 `json:"update_at"` } UpdateMemberMeReq { DisplayName string `json:"display_name,optional"` Avatar string `json:"avatar,optional"` Language string `json:"language,optional"` Currency string `json:"currency,optional"` Phone string `json:"phone,optional"` } ListMembersReq { Page int64 `form:"page,optional"` PageSize int64 `form:"pageSize,optional"` } ListMembersData { Pagination PaginationData `json:"pagination"` List []MemberMeData `json:"list"` } MemberPath { UID string `path:"uid" validate:"required"` } UpdateMemberRolesReq { UID string `path:"uid" validate:"required"` Roles []string `json:"roles" validate:"required"` } UpdateMemberPasswordReq { UID string `path:"uid" validate:"required"` Password string `json:"password" validate:"required,min=8,max=128"` } UpdateMemberProfileReq { UID string `path:"uid" validate:"required"` DisplayName *string `json:"display_name,optional"` Avatar *string `json:"avatar,optional"` Language *string `json:"language,optional"` Currency *string `json:"currency,optional"` Phone *string `json:"phone,optional"` Status *string `json:"status,optional"` BusinessEmail *string `json:"business_email,optional"` BusinessEmailVerified *bool `json:"business_email_verified,optional"` BusinessPhone *string `json:"business_phone,optional"` BusinessPhoneVerified *bool `json:"business_phone_verified,optional"` EmailVerified *bool `json:"email_verified,optional"` } UploadAvatarData { Avatar string `json:"avatar"` } MemberPlacementSettingsData { WebSearchProvider string `json:"web_search_provider"` // brave | exa BraveAPIKey string `json:"brave_api_key,omitempty"` BraveAPIKeyConfigured bool `json:"brave_api_key_configured"` ExaAPIKey string `json:"exa_api_key,omitempty"` ExaAPIKeyConfigured bool `json:"exa_api_key_configured"` BraveCountry string `json:"brave_country"` BraveSearchLang string `json:"brave_search_lang"` ExaUserLocation string `json:"exa_user_location"` ExpandStrategy string `json:"expand_strategy"` // brave | llm | hybrid DevModeEnabled bool `json:"dev_mode_enabled"` } MemberAiSettingsData { Provider string `json:"provider"` Model string `json:"model"` ResearchProvider string `json:"research_provider,omitempty"` ResearchModel string `json:"research_model,omitempty"` ApiKeys map[string]string `json:"api_keys,omitempty"` ApiKeysConfigured map[string]interface{} `json:"api_keys_configured"` } UpdateMemberAiSettingsReq { Provider *string `json:"provider,optional"` Model *string `json:"model,optional"` ResearchProvider *string `json:"research_provider,optional"` ResearchModel *string `json:"research_model,optional"` ApiKeys map[string]string `json:"api_keys,optional"` } MemberAiProviderModelsReq { Provider string `path:"provider" validate:"required,oneof=opencode-go xai"` ApiKey string `json:"api_key,optional"` } MemberAiProviderModelsData { ID string `json:"id"` Label string `json:"label"` Models []string `json:"models"` Streams bool `json:"streams"` Error string `json:"error,omitempty"` } UpdateMemberPlacementSettingsReq { WebSearchProvider *string `json:"web_search_provider,optional"` BraveAPIKey *string `json:"brave_api_key,optional"` ExaAPIKey *string `json:"exa_api_key,optional"` BraveCountry *string `json:"brave_country,optional"` BraveSearchLang *string `json:"brave_search_lang,optional"` ExaUserLocation *string `json:"exa_user_location,optional"` ExpandStrategy *string `json:"expand_strategy,optional"` DevModeEnabled *bool `json:"dev_mode_enabled,optional"` } MemberCapabilitiesData { DiscoverReady bool `json:"discover_ready"` AiReady bool `json:"ai_ready"` PublishReady bool `json:"publish_ready"` DiscoverHint string `json:"discover_hint,omitempty"` AiHint string `json:"ai_hint,omitempty"` PublishHint string `json:"publish_hint,omitempty"` ActiveThreadsAccountId string `json:"active_threads_account_id,omitempty"` } ) @server( group: member prefix: /api/v1/members middleware: AuthJWT tags: "Member" summary: "Current member profile endpoints. Requires Bearer JWT or dev headers." ) service gateway { @handler listMembers get / (ListMembersReq) returns (ListMembersData) @handler getMemberMe get /me returns (MemberMeData) @handler updateMemberMe patch /me (UpdateMemberMeReq) returns (MemberMeData) @handler uploadMemberAvatar post /me/avatar returns (UploadAvatarData) @handler getMemberPlacementSettings get /me/placement-settings returns (MemberPlacementSettingsData) @handler updateMemberPlacementSettings patch /me/placement-settings (UpdateMemberPlacementSettingsReq) returns (MemberPlacementSettingsData) @handler getMemberAiSettings get /me/ai-settings returns (MemberAiSettingsData) @handler updateMemberAiSettings put /me/ai-settings (UpdateMemberAiSettingsReq) returns (MemberAiSettingsData) @handler listMemberAiProviderModels post /me/ai-settings/providers/:provider/models (MemberAiProviderModelsReq) returns (MemberAiProviderModelsData) @handler getMemberCapabilities get /me/capabilities returns (MemberCapabilitiesData) @handler updateMemberRoles patch /:uid/roles (UpdateMemberRolesReq) returns (MemberMeData) @handler updateMemberPassword patch /:uid/password (UpdateMemberPasswordReq) returns (MemberMeData) @handler updateMemberProfile patch /:uid/profile (UpdateMemberProfileReq) returns (MemberMeData) }