syntax = "v1" // growth-loop: outcomes / checkups / account health / workspaces / invite rewards type ( OutcomeEventPublic { Id string `json:"id"` SourceType string `json:"source_type"` SourceId string `json:"source_id"` ThreadsAccountId string `json:"threads_account_id,optional"` Kind string `json:"kind"` Confidence string `json:"confidence"` Status string `json:"status"` ReplyCountDelta int `json:"reply_count_delta,optional"` LikeCountDelta int `json:"like_count_delta,optional"` FollowersDelta int `json:"followers_delta,optional"` ConversionAmount float64 `json:"conversion_amount,optional"` ConversionNote string `json:"conversion_note,optional"` ConversionCurrency string `json:"conversion_currency,optional"` WindowEndsAt int64 `json:"window_ends_at"` SentAt int64 `json:"sent_at"` CreatedAt int64 `json:"created_at"` UpdatedAt int64 `json:"updated_at"` } OutcomeSummaryData { From int64 `json:"from"` To int64 `json:"to"` Reach int `json:"reach"` Conversations int `json:"conversations"` FollowsPossible int `json:"follows_possible"` FollowsConfirmed int `json:"follows_confirmed"` Conversions int `json:"conversions"` ConversionAmount float64 `json:"conversion_amount"` } ListOutcomesReq { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=20"` Kind string `form:"kind,optional"` Confidence string `form:"confidence,optional"` SourceType string `form:"source_type,optional"` From int64 `form:"from,optional"` To int64 `form:"to,optional"` } OutcomeListData { List []OutcomeEventPublic `json:"list"` Pagination Pagination `json:"pagination"` } OutcomeSummaryReq { Range string `form:"range,default=week"` // week | month From int64 `form:"from,optional"` To int64 `form:"to,optional"` } GetOutcomeReq { Id string `path:"id"` } ReportConversionReq { Id string `path:"id"` Amount float64 `json:"amount,optional"` Note string `json:"note,optional"` Currency string `json:"currency,optional"` } UpdateConversionReq { Id string `path:"id"` Amount float64 `json:"amount,optional"` Note string `json:"note,optional"` Currency string `json:"currency,optional"` } DeleteConversionReq { Id string `path:"id"` } CheckupFindingPublic { Claim string `json:"claim"` Evidence []string `json:"evidence"` } CheckupActionPublic { Title string `json:"title"` Reason string `json:"reason"` Deeplink string `json:"deeplink"` } WeeklyCheckupPublic { Id string `json:"id"` WeekKey string `json:"week_key"` Status string `json:"status"` Summary string `json:"summary"` Findings []CheckupFindingPublic `json:"findings"` Actions []CheckupActionPublic `json:"actions"` Error string `json:"error,optional"` CreatedAt int64 `json:"created_at"` UpdatedAt int64 `json:"updated_at"` } ListCheckupsReq { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=20"` } CheckupListData { List []WeeklyCheckupPublic `json:"list"` Pagination Pagination `json:"pagination"` } GetCheckupReq { Id string `path:"id"` } AccountHealthPublic { ThreadsAccountId string `json:"threads_account_id"` Score int `json:"score"` Level string `json:"level"` Factors []string `json:"factors"` Advice string `json:"advice"` ComputedAt int64 `json:"computed_at"` } AccountHealthListData { List []AccountHealthPublic `json:"list"` } GetAccountHealthReq { AccountId string `path:"accountId"` } WorkspacePublic { Id string `json:"id"` Name string `json:"name"` ReviewRequired bool `json:"review_required"` IsDefault bool `json:"is_default"` Archived bool `json:"archived"` FooterText string `json:"footer_text,optional"` HidePoweredBy bool `json:"hide_powered_by,optional"` BrandName string `json:"brand_name,optional"` CreatedAt int64 `json:"created_at"` UpdatedAt int64 `json:"updated_at"` } WorkspaceListData { List []WorkspacePublic `json:"list"` CurrentWorkspaceId string `json:"current_workspace_id"` } CreateWorkspaceReq { Name string `json:"name"` } UpdateWorkspaceReq { Id string `path:"id"` Name string `json:"name,optional"` ReviewRequired *bool `json:"review_required,optional"` } WorkspaceIdReq { Id string `path:"id"` } SwitchWorkspaceReq { Id string `path:"id"` } DraftReviewPublic { Id string `json:"id"` RefType string `json:"ref_type"` RefId string `json:"ref_id"` WorkspaceId string `json:"workspace_id"` Status string `json:"status"` Reason string `json:"reason,optional"` CreatedAt int64 `json:"created_at"` UpdatedAt int64 `json:"updated_at"` } SubmitDraftReviewReq { RefType string `json:"ref_type"` RefId string `json:"ref_id"` WorkspaceId string `json:"workspace_id,optional"` } ReviewDecisionReq { Id string `path:"id"` Reason string `json:"reason,optional"` } ListDraftReviewsReq { Page int `form:"page,default=1"` PageSize int `form:"pageSize,default=20"` Status string `form:"status,optional"` } DraftReviewListData { List []DraftReviewPublic `json:"list"` Pagination Pagination `json:"pagination"` } ExportReportReq { WorkspaceId string `form:"workspace_id"` YearMonth string `form:"year_month"` // YYYY-MM Format string `form:"format,optional"` // md | pdf } ExportReportData { Url string `json:"url"` ExpiresAt int64 `json:"expires_at,optional"` Filename string `json:"filename"` // ContentType: text/markdown or application/pdf ContentType string `json:"content_type,optional"` // Format: md | pdf Format string `json:"format,optional"` } // branding fields on workspace (P2 white-label report) // extended via UpdateWorkspaceBranding in growth_p2.api ) @server ( group: outcomes prefix: /api/v1/outcomes middleware: AuthJWT ) service gateway { @handler GetOutcomeSummary get /summary (OutcomeSummaryReq) returns (OutcomeSummaryData) @handler ListOutcomes get / (ListOutcomesReq) returns (OutcomeListData) @handler GetOutcome get /:id (GetOutcomeReq) returns (OutcomeEventPublic) @handler ReportConversion post /:id/conversion (ReportConversionReq) returns (OutcomeEventPublic) @handler UpdateConversion put /:id/conversion (UpdateConversionReq) returns (OutcomeEventPublic) @handler DeleteConversion delete /:id/conversion (DeleteConversionReq) returns (OkData) } @server ( group: checkups prefix: /api/v1/checkups middleware: AuthJWT ) service gateway { @handler GetLatestCheckup get /latest returns (WeeklyCheckupPublic) @handler ListCheckups get / (ListCheckupsReq) returns (CheckupListData) @handler GetCheckup get /:id (GetCheckupReq) returns (WeeklyCheckupPublic) @handler GenerateCheckupNow post /generate returns (WeeklyCheckupPublic) } @server ( group: health prefix: /api/v1/account-health middleware: AuthJWT ) service gateway { @handler ListAccountHealth get / returns (AccountHealthListData) @handler GetAccountHealth get /:accountId (GetAccountHealthReq) returns (AccountHealthPublic) } @server ( group: workspaces prefix: /api/v1/workspaces middleware: AuthJWT ) service gateway { @handler ListWorkspaces get / returns (WorkspaceListData) @handler CreateWorkspace post / (CreateWorkspaceReq) returns (WorkspacePublic) @handler UpdateWorkspace put /:id (UpdateWorkspaceReq) returns (WorkspacePublic) @handler ArchiveWorkspace post /:id/archive (WorkspaceIdReq) returns (OkData) @handler SwitchWorkspace post /:id/switch (SwitchWorkspaceReq) returns (WorkspaceListData) @handler SubmitDraftReview post /reviews (SubmitDraftReviewReq) returns (DraftReviewPublic) @handler ApproveDraftReview post /reviews/:id/approve (ReviewDecisionReq) returns (DraftReviewPublic) @handler RejectDraftReview post /reviews/:id/reject (ReviewDecisionReq) returns (DraftReviewPublic) @handler ListDraftReviews get /reviews (ListDraftReviewsReq) returns (DraftReviewListData) @handler ExportWorkspaceReport get /report/export (ExportReportReq) returns (ExportReportData) }