2026-06-26 08:37:04 +00:00
|
|
|
syntax = "v1"
|
|
|
|
|
|
|
|
|
|
type (
|
|
|
|
|
CopyResearchMapData {
|
|
|
|
|
AudienceSummary string `json:"audience_summary,omitempty"`
|
|
|
|
|
ContentGoal string `json:"content_goal,omitempty"`
|
|
|
|
|
Questions []string `json:"questions,omitempty"`
|
|
|
|
|
Pillars []string `json:"pillars,omitempty"`
|
|
|
|
|
Exclusions []string `json:"exclusions,omitempty"`
|
|
|
|
|
SuggestedTags []string `json:"suggested_tags,omitempty"`
|
|
|
|
|
BenchmarkNotes string `json:"benchmark_notes,omitempty"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PersonaData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
DisplayName string `json:"display_name,omitempty"`
|
|
|
|
|
Persona string `json:"persona,omitempty"`
|
|
|
|
|
Brief string `json:"brief,omitempty"`
|
|
|
|
|
StyleProfile string `json:"style_profile,omitempty"`
|
|
|
|
|
StyleBenchmark string `json:"style_benchmark,omitempty"`
|
|
|
|
|
SeedQuery string `json:"seed_query,omitempty"`
|
|
|
|
|
CopyResearchMap CopyResearchMapData `json:"copy_research_map,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
UpdateAt int64 `json:"update_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonasData {
|
|
|
|
|
List []PersonaData `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreatePersonaReq {
|
|
|
|
|
DisplayName string `json:"display_name,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PersonaPath {
|
|
|
|
|
ID string `path:"id" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdatePersonaReq {
|
|
|
|
|
DisplayName *string `json:"display_name,optional"`
|
|
|
|
|
Persona *string `json:"persona,optional"`
|
|
|
|
|
Brief *string `json:"brief,optional"`
|
|
|
|
|
StyleProfile *string `json:"style_profile,optional"`
|
|
|
|
|
StyleBenchmark *string `json:"style_benchmark,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaStyleAnalysisReq {
|
|
|
|
|
BenchmarkUsername string `json:"benchmark_username" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaStyleAnalysisData {
|
|
|
|
|
JobID string `json:"job_id"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdatePersonaHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
UpdatePersonaReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaStyleAnalysisHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
StartPersonaStyleAnalysisReq
|
|
|
|
|
}
|
|
|
|
|
|
2026-07-06 06:13:14 +00:00
|
|
|
StartPersonaStyleAnalysisFromTextReq {
|
|
|
|
|
ReferenceTexts []string `json:"reference_texts,optional"`
|
|
|
|
|
RawText string `json:"raw_text,optional"`
|
|
|
|
|
SourceLabel string `json:"source_label,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaStyleAnalysisFromTextData {
|
|
|
|
|
Persona PersonaData `json:"persona"`
|
|
|
|
|
PostCount int `json:"post_count"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaStyleAnalysisFromTextHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
StartPersonaStyleAnalysisFromTextReq
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-26 08:37:04 +00:00
|
|
|
StartPersonaViralScanJobReq {
|
|
|
|
|
Keywords []string `json:"keywords,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaViralScanJobData {
|
|
|
|
|
JobID string `json:"job_id"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaViralScanJobHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
StartPersonaViralScanJobReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaViralScanPostsReq {
|
|
|
|
|
Limit int `form:"limit,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ViralScanPostData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
SearchTag string `json:"search_tag"`
|
|
|
|
|
Permalink string `json:"permalink"`
|
|
|
|
|
Author string `json:"author"`
|
|
|
|
|
AuthorVerified bool `json:"author_verified,omitempty"`
|
|
|
|
|
FollowerCount int `json:"follower_count,omitempty"`
|
|
|
|
|
Text string `json:"text"`
|
|
|
|
|
LikeCount int `json:"like_count"`
|
|
|
|
|
ReplyCount int `json:"reply_count"`
|
|
|
|
|
EngagementScore int `json:"engagement_score"`
|
|
|
|
|
Source string `json:"source"`
|
|
|
|
|
ScanJobID string `json:"scan_job_id"`
|
|
|
|
|
Replies []ScanReplyData `json:"replies,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaViralScanPostsData {
|
|
|
|
|
List []ViralScanPostData `json:"list"`
|
|
|
|
|
Total int `json:"total"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaViralScanPostsHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
ListPersonaViralScanPostsReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CopyDraftData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
2026-07-06 06:13:14 +00:00
|
|
|
ContentPlanID string `json:"content_plan_id,omitempty"`
|
2026-06-26 08:37:04 +00:00
|
|
|
CopyMissionID string `json:"copy_mission_id,omitempty"`
|
|
|
|
|
ScanPostID string `json:"scan_post_id,omitempty"`
|
2026-07-06 06:13:14 +00:00
|
|
|
FormulaID string `json:"formula_id,omitempty"`
|
2026-06-26 08:37:04 +00:00
|
|
|
DraftType string `json:"draft_type"`
|
|
|
|
|
SortOrder int `json:"sort_order,omitempty"`
|
|
|
|
|
Text string `json:"text"`
|
2026-07-06 06:13:14 +00:00
|
|
|
TopicTag string `json:"topic_tag,omitempty"`
|
2026-06-26 08:37:04 +00:00
|
|
|
Angle string `json:"angle,omitempty"`
|
|
|
|
|
Hook string `json:"hook,omitempty"`
|
|
|
|
|
Rationale string `json:"rationale,omitempty"`
|
|
|
|
|
ReferenceNotes string `json:"reference_notes,omitempty"`
|
|
|
|
|
Sources []string `json:"sources,omitempty"`
|
2026-07-06 06:13:14 +00:00
|
|
|
AiScore int `json:"ai_score,omitempty"`
|
|
|
|
|
FormulaScore int `json:"formula_score,omitempty"`
|
|
|
|
|
BrandFitScore int `json:"brand_fit_score,omitempty"`
|
|
|
|
|
RiskScore int `json:"risk_score,omitempty"`
|
|
|
|
|
SimilarityScore int `json:"similarity_score,omitempty"`
|
|
|
|
|
EngagementPotential int `json:"engagement_potential,omitempty"`
|
|
|
|
|
FreshnessScore int `json:"freshness_score,omitempty"`
|
|
|
|
|
ReviewSuggestion string `json:"review_suggestion,omitempty"`
|
2026-06-26 08:37:04 +00:00
|
|
|
Status string `json:"status,omitempty"`
|
2026-07-06 06:13:14 +00:00
|
|
|
PublishQueueID string `json:"publish_queue_id,omitempty"`
|
2026-06-26 08:37:04 +00:00
|
|
|
PublishedMediaID string `json:"published_media_id,omitempty"`
|
|
|
|
|
PublishedPermalink string `json:"published_permalink,omitempty"`
|
|
|
|
|
PublishedAt int64 `json:"published_at,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaCopyDraftsData {
|
|
|
|
|
List []CopyDraftData `json:"list"`
|
|
|
|
|
Total int `json:"total"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaCopyDraftReq {
|
|
|
|
|
ScanPostID string `json:"scan_post_id" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaCopyDraftHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
GeneratePersonaCopyDraftReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaCopyDraftData {
|
|
|
|
|
Draft CopyDraftData `json:"draft"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CopyDraftPath {
|
|
|
|
|
ID string `path:"id" validate:"required"`
|
|
|
|
|
DraftID string `path:"draftId" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateCopyDraftReq {
|
2026-07-06 06:13:14 +00:00
|
|
|
Text *string `json:"text,optional"`
|
|
|
|
|
TopicTag *string `json:"topic_tag,optional"`
|
|
|
|
|
Hook *string `json:"hook,optional"`
|
|
|
|
|
Angle *string `json:"angle,optional"`
|
|
|
|
|
Rationale *string `json:"rationale,optional"`
|
|
|
|
|
Status *string `json:"status,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TopicCandidateData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Source string `json:"source,omitempty"`
|
|
|
|
|
Category string `json:"category,omitempty"`
|
|
|
|
|
SeedQuery string `json:"seed_query,omitempty"`
|
|
|
|
|
TrendReason string `json:"trend_reason,omitempty"`
|
|
|
|
|
TrendKeywords []string `json:"trend_keywords,omitempty"`
|
|
|
|
|
HeatScore int `json:"heat_score,omitempty"`
|
|
|
|
|
FitScore int `json:"fit_score,omitempty"`
|
|
|
|
|
InteractionScore int `json:"interaction_score,omitempty"`
|
|
|
|
|
ExtendScore int `json:"extend_score,omitempty"`
|
|
|
|
|
RiskScore int `json:"risk_score,omitempty"`
|
|
|
|
|
FinalScore float64 `json:"final_score,omitempty"`
|
|
|
|
|
RecommendedMissions []string `json:"recommended_missions,omitempty"`
|
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
UpdateAt int64 `json:"update_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ContentPlanData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
TopicCandidateID string `json:"topic_candidate_id,omitempty"`
|
|
|
|
|
Topic string `json:"topic"`
|
|
|
|
|
Mission string `json:"mission"`
|
|
|
|
|
TargetAudience string `json:"target_audience,omitempty"`
|
|
|
|
|
Angle string `json:"angle,omitempty"`
|
|
|
|
|
OpeningType string `json:"opening_type,omitempty"`
|
|
|
|
|
BodyType string `json:"body_type,omitempty"`
|
|
|
|
|
Emotion string `json:"emotion,omitempty"`
|
|
|
|
|
EndingType string `json:"ending_type,omitempty"`
|
|
|
|
|
CtaType string `json:"cta_type,omitempty"`
|
|
|
|
|
RiskLevel string `json:"risk_level,omitempty"`
|
|
|
|
|
RequiresHumanReview bool `json:"requires_human_review,omitempty"`
|
|
|
|
|
Avoid []string `json:"avoid,omitempty"`
|
|
|
|
|
SelectedKnowledge []string `json:"selected_knowledge,omitempty"`
|
|
|
|
|
Status string `json:"status,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
UpdateAt int64 `json:"update_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FeedbackEventData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
ContentPlanID string `json:"content_plan_id,omitempty"`
|
|
|
|
|
DraftID string `json:"draft_id,omitempty"`
|
|
|
|
|
Decision string `json:"decision"`
|
|
|
|
|
Note string `json:"note,omitempty"`
|
|
|
|
|
Snapshot string `json:"snapshot,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
KnowledgeSourceData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
SourceType string `json:"source_type"`
|
|
|
|
|
Title string `json:"title,omitempty"`
|
|
|
|
|
Filename string `json:"filename,omitempty"`
|
|
|
|
|
ParsedStatus string `json:"parsed_status,omitempty"`
|
|
|
|
|
ChunkCount int `json:"chunk_count,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
KnowledgeChunkData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
SourceID string `json:"source_id"`
|
|
|
|
|
Content string `json:"content"`
|
|
|
|
|
Topics []string `json:"topics,omitempty"`
|
|
|
|
|
StyleTags []string `json:"style_tags,omitempty"`
|
|
|
|
|
RiskLevel string `json:"risk_level,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FormulaPoolData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
Type string `json:"type"`
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Pattern string `json:"pattern,omitempty"`
|
|
|
|
|
UseCases []string `json:"use_cases,omitempty"`
|
|
|
|
|
Avoid []string `json:"avoid,omitempty"`
|
|
|
|
|
Weight int `json:"weight,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
UpdateAt int64 `json:"update_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateKnowledgeSourceReq {
|
|
|
|
|
SourceType string `json:"source_type" validate:"required"`
|
|
|
|
|
Title string `json:"title,optional"`
|
|
|
|
|
Filename string `json:"filename,optional"`
|
|
|
|
|
Content string `json:"content,optional"`
|
|
|
|
|
ContentBase64 string `json:"content_base64,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateKnowledgeSourceHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
CreateKnowledgeSourceReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListKnowledgeSourcesData { List []KnowledgeSourceData `json:"list"` }
|
|
|
|
|
ListKnowledgeChunksData { List []KnowledgeChunkData `json:"list"` }
|
|
|
|
|
ListFormulaPoolsData { List []FormulaPoolData `json:"list"` }
|
|
|
|
|
|
|
|
|
|
CreateFormulaPoolReq {
|
|
|
|
|
Type string `json:"type" validate:"required"`
|
|
|
|
|
Name string `json:"name" validate:"required"`
|
|
|
|
|
Pattern string `json:"pattern,optional"`
|
|
|
|
|
UseCases []string `json:"use_cases,optional"`
|
|
|
|
|
Avoid []string `json:"avoid,optional"`
|
|
|
|
|
Weight int `json:"weight,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateFormulaPoolHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
CreateFormulaPoolReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListTopicCandidatesData {
|
|
|
|
|
List []TopicCandidateData `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListContentPlansData {
|
|
|
|
|
List []ContentPlanData `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateContentPlanReq {
|
|
|
|
|
TopicCandidateID string `json:"topic_candidate_id,optional"`
|
|
|
|
|
Topic string `json:"topic" validate:"required"`
|
|
|
|
|
Mission string `json:"mission" validate:"required"`
|
|
|
|
|
TargetAudience string `json:"target_audience,optional"`
|
|
|
|
|
Angle string `json:"angle,optional"`
|
|
|
|
|
OpeningType string `json:"opening_type,optional"`
|
|
|
|
|
BodyType string `json:"body_type,optional"`
|
|
|
|
|
Emotion string `json:"emotion,optional"`
|
|
|
|
|
EndingType string `json:"ending_type,optional"`
|
|
|
|
|
CtaType string `json:"cta_type,optional"`
|
|
|
|
|
RiskLevel string `json:"risk_level,optional"`
|
|
|
|
|
RequiresHumanReview bool `json:"requires_human_review,optional"`
|
|
|
|
|
Avoid []string `json:"avoid,optional"`
|
|
|
|
|
SelectedKnowledge []string `json:"selected_knowledge,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateContentPlanHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
CreateContentPlanReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ContentPlanPath {
|
|
|
|
|
ID string `path:"id" validate:"required"`
|
|
|
|
|
ContentPlanID string `path:"contentPlanId" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateContentPlanReq {
|
|
|
|
|
Topic *string `json:"topic,optional"`
|
|
|
|
|
Mission *string `json:"mission,optional"`
|
|
|
|
|
TargetAudience *string `json:"target_audience,optional"`
|
|
|
|
|
Angle *string `json:"angle,optional"`
|
|
|
|
|
OpeningType *string `json:"opening_type,optional"`
|
|
|
|
|
BodyType *string `json:"body_type,optional"`
|
|
|
|
|
Emotion *string `json:"emotion,optional"`
|
|
|
|
|
EndingType *string `json:"ending_type,optional"`
|
|
|
|
|
CtaType *string `json:"cta_type,optional"`
|
|
|
|
|
RiskLevel *string `json:"risk_level,optional"`
|
|
|
|
|
RequiresHumanReview *bool `json:"requires_human_review,optional"`
|
|
|
|
|
Avoid []string `json:"avoid,optional"`
|
|
|
|
|
SelectedKnowledge []string `json:"selected_knowledge,optional"`
|
|
|
|
|
Status *string `json:"status,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateContentPlanHandlerReq {
|
|
|
|
|
ContentPlanPath
|
|
|
|
|
UpdateContentPlanReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateFeedbackEventReq {
|
|
|
|
|
ContentPlanID string `json:"content_plan_id,optional"`
|
|
|
|
|
DraftID string `json:"draft_id,optional"`
|
|
|
|
|
Decision string `json:"decision" validate:"required"`
|
|
|
|
|
Note string `json:"note,optional"`
|
|
|
|
|
Snapshot string `json:"snapshot,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CreateFeedbackEventHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
CreateFeedbackEventReq
|
2026-06-26 08:37:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpdateCopyDraftHandlerReq {
|
|
|
|
|
CopyDraftPath
|
|
|
|
|
UpdateCopyDraftReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PublishCopyDraftReq {
|
2026-07-06 06:13:14 +00:00
|
|
|
Text string `json:"text,optional"`
|
|
|
|
|
TopicTag string `json:"topic_tag,optional"`
|
|
|
|
|
Confirm bool `json:"confirm"`
|
2026-06-26 08:37:04 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PublishCopyDraftHandlerReq {
|
|
|
|
|
CopyDraftPath
|
|
|
|
|
PublishCopyDraftReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PublishCopyDraftData {
|
|
|
|
|
DraftID string `json:"draft_id"`
|
|
|
|
|
MediaID string `json:"media_id"`
|
|
|
|
|
Permalink string `json:"permalink,omitempty"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
2026-06-28 08:28:42 +00:00
|
|
|
|
2026-07-06 06:13:14 +00:00
|
|
|
ScheduleCopyDraftsReq {
|
|
|
|
|
AccountID string `json:"account_id" validate:"required"`
|
|
|
|
|
DraftIDs []string `json:"draft_ids" validate:"required,min=1"`
|
|
|
|
|
StartAt int64 `json:"start_at,optional"`
|
|
|
|
|
Timezone string `json:"timezone,optional"`
|
|
|
|
|
Slots []PublishSlotData `json:"slots,optional"`
|
|
|
|
|
Mode string `json:"mode,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ScheduleCopyDraftsData {
|
|
|
|
|
Scheduled int `json:"scheduled"`
|
|
|
|
|
List []PublishQueueItemData `json:"list"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SchedulePersonaDraftsHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
ScheduleCopyDraftsReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StylePresetData {
|
|
|
|
|
ID string `json:"id"`
|
|
|
|
|
PersonaID string `json:"persona_id"`
|
|
|
|
|
Name string `json:"name"`
|
|
|
|
|
Tone string `json:"tone,omitempty"`
|
|
|
|
|
CTA []string `json:"cta,omitempty"`
|
|
|
|
|
BannedWords []string `json:"banned_words,omitempty"`
|
|
|
|
|
Notes string `json:"notes,omitempty"`
|
|
|
|
|
CreateAt int64 `json:"create_at"`
|
|
|
|
|
UpdateAt int64 `json:"update_at"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListStylePresetsData {
|
|
|
|
|
List []StylePresetData `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpsertStylePresetReq {
|
|
|
|
|
Name string `json:"name" validate:"required"`
|
|
|
|
|
Tone string `json:"tone,optional"`
|
|
|
|
|
CTA []string `json:"cta,optional"`
|
|
|
|
|
BannedWords []string `json:"banned_words,optional"`
|
|
|
|
|
Notes string `json:"notes,optional"`
|
|
|
|
|
Apply bool `json:"apply,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StylePresetPath {
|
|
|
|
|
ID string `path:"id" validate:"required"`
|
|
|
|
|
PresetID string `path:"presetId" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UpsertStylePresetHandlerReq {
|
|
|
|
|
StylePresetPath
|
|
|
|
|
UpsertStylePresetReq
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-28 08:28:42 +00:00
|
|
|
DeleteCopyDraftData {
|
|
|
|
|
DraftID string `json:"draft_id"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
2026-07-06 06:13:14 +00:00
|
|
|
|
|
|
|
|
PrunePersonaCopyDraftsReq {
|
|
|
|
|
Keep int `json:"keep,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PrunePersonaCopyDraftsHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
PrunePersonaCopyDraftsReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
PrunePersonaCopyDraftsData {
|
|
|
|
|
Deleted int64 `json:"deleted"`
|
|
|
|
|
Kept int `json:"kept"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaContentInboxReq {
|
|
|
|
|
Page int64 `form:"page,optional"`
|
|
|
|
|
PageSize int64 `form:"pageSize,optional"`
|
|
|
|
|
Status string `form:"status,optional"`
|
|
|
|
|
RangeStart int64 `form:"rangeStart,optional"`
|
|
|
|
|
RangeEnd int64 `form:"rangeEnd,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaContentInboxHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
ListPersonaContentInboxReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ContentInboxItemData {
|
|
|
|
|
CopyDraftData
|
|
|
|
|
ScheduledAt int64 `json:"scheduled_at,omitempty"`
|
|
|
|
|
Lifecycle string `json:"lifecycle"`
|
|
|
|
|
GroupDate int64 `json:"group_date"`
|
|
|
|
|
FormulaLabel string `json:"formula_label,omitempty"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ListPersonaContentInboxData {
|
|
|
|
|
Pagination PaginationData `json:"pagination"`
|
|
|
|
|
List []ContentInboxItemData `json:"list"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SchedulePersonaCopyDraftReq {
|
|
|
|
|
AccountID string `json:"account_id" validate:"required"`
|
|
|
|
|
TopicTag string `json:"topic_tag,optional"`
|
|
|
|
|
ScheduledAt int64 `json:"scheduled_at,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SchedulePersonaCopyDraftHandlerReq {
|
|
|
|
|
CopyDraftPath
|
|
|
|
|
SchedulePersonaCopyDraftReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ContentFormulaPath {
|
|
|
|
|
ID string `path:"id" validate:"required"`
|
|
|
|
|
FormulaID string `path:"formulaId" validate:"required"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GenerateFromContentFormulaReq {
|
|
|
|
|
AccountID string `json:"account_id" validate:"required"`
|
|
|
|
|
Topic string `json:"topic" validate:"required"`
|
|
|
|
|
Brief string `json:"brief,optional"`
|
|
|
|
|
UseWebSearch bool `json:"use_web_search,optional"`
|
|
|
|
|
DraftCount int `json:"draft_count,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GenerateFromContentFormulaHandlerReq {
|
|
|
|
|
ContentFormulaPath
|
|
|
|
|
GenerateFromContentFormulaReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GenerateFromContentFormulaData {
|
|
|
|
|
List []CopyDraftData `json:"list"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaTopicMatrixReq {
|
|
|
|
|
Topic string `json:"topic" validate:"required"`
|
|
|
|
|
ContentPlanID string `json:"content_plan_id,optional"`
|
|
|
|
|
Brief string `json:"brief,optional"`
|
|
|
|
|
UseWebSearch bool `json:"use_web_search,optional"`
|
|
|
|
|
DraftCount int `json:"draft_count,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaTopicMatrixHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
GeneratePersonaTopicMatrixReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
GeneratePersonaTopicMatrixData {
|
|
|
|
|
List []CopyDraftData `json:"list"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaTopicMatrixJobHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
GeneratePersonaTopicMatrixReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaTopicMatrixJobData {
|
|
|
|
|
JobID string `json:"job_id"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
AiProvider string `json:"ai_provider"`
|
|
|
|
|
AiModel string `json:"ai_model"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaFormulaDraftJobReq {
|
|
|
|
|
AccountID string `json:"account_id" validate:"required"`
|
|
|
|
|
FormulaID string `json:"formula_id" validate:"required"`
|
|
|
|
|
Topic string `json:"topic" validate:"required"`
|
|
|
|
|
Brief string `json:"brief,optional"`
|
|
|
|
|
UseWebSearch bool `json:"use_web_search,optional"`
|
|
|
|
|
DraftCount int `json:"draft_count,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaFormulaDraftJobHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
StartPersonaFormulaDraftJobReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaFormulaDraftJobData {
|
|
|
|
|
JobID string `json:"job_id"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
AiProvider string `json:"ai_provider"`
|
|
|
|
|
AiModel string `json:"ai_model"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaRewriteDraftJobReq {
|
|
|
|
|
AccountID string `json:"account_id" validate:"required"`
|
|
|
|
|
ReferenceText string `json:"reference_text" validate:"required"`
|
|
|
|
|
Topic string `json:"topic" validate:"required"`
|
|
|
|
|
Brief string `json:"brief,optional"`
|
|
|
|
|
SaveLabel string `json:"save_label,optional"`
|
|
|
|
|
UseWebSearch bool `json:"use_web_search,optional"`
|
|
|
|
|
DraftCount int `json:"draft_count,optional"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaRewriteDraftJobHandlerReq {
|
|
|
|
|
PersonaPath
|
|
|
|
|
StartPersonaRewriteDraftJobReq
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
StartPersonaRewriteDraftJobData {
|
|
|
|
|
JobID string `json:"job_id"`
|
|
|
|
|
Status string `json:"status"`
|
|
|
|
|
AiProvider string `json:"ai_provider"`
|
|
|
|
|
AiModel string `json:"ai_model"`
|
|
|
|
|
Message string `json:"message"`
|
|
|
|
|
}
|
2026-06-26 08:37:04 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
@server(
|
|
|
|
|
group: persona
|
|
|
|
|
prefix: /api/v1/personas
|
|
|
|
|
middleware: AuthJWT
|
|
|
|
|
tags: "Persona"
|
|
|
|
|
summary: "Reusable persona profiles with 8D style strategy. Requires Bearer JWT."
|
|
|
|
|
)
|
|
|
|
|
service gateway {
|
|
|
|
|
@handler listPersonas
|
|
|
|
|
get / returns (ListPersonasData)
|
|
|
|
|
|
|
|
|
|
@handler createPersona
|
|
|
|
|
post / (CreatePersonaReq) returns (PersonaData)
|
|
|
|
|
|
|
|
|
|
@handler getPersona
|
|
|
|
|
get /:id (PersonaPath) returns (PersonaData)
|
|
|
|
|
|
|
|
|
|
@handler updatePersona
|
|
|
|
|
patch /:id (UpdatePersonaHandlerReq) returns (PersonaData)
|
|
|
|
|
|
|
|
|
|
@handler deletePersona
|
|
|
|
|
delete /:id (PersonaPath)
|
|
|
|
|
|
|
|
|
|
@handler startPersonaStyleAnalysis
|
|
|
|
|
post /:id/style-analysis (StartPersonaStyleAnalysisHandlerReq) returns (StartPersonaStyleAnalysisData)
|
|
|
|
|
|
2026-07-06 06:13:14 +00:00
|
|
|
@handler startPersonaStyleAnalysisFromText
|
|
|
|
|
post /:id/style-analysis-from-text (StartPersonaStyleAnalysisFromTextHandlerReq) returns (StartPersonaStyleAnalysisFromTextData)
|
|
|
|
|
|
2026-06-26 08:37:04 +00:00
|
|
|
@handler startPersonaViralScanJob
|
|
|
|
|
post /:id/viral-scan-jobs (StartPersonaViralScanJobHandlerReq) returns (StartPersonaViralScanJobData)
|
|
|
|
|
|
|
|
|
|
@handler listPersonaViralScanPosts
|
|
|
|
|
get /:id/viral-scan-posts (ListPersonaViralScanPostsHandlerReq) returns (ListPersonaViralScanPostsData)
|
|
|
|
|
|
|
|
|
|
@handler listPersonaCopyDrafts
|
|
|
|
|
get /:id/copy-drafts (PersonaPath) returns (ListPersonaCopyDraftsData)
|
|
|
|
|
|
2026-07-06 06:13:14 +00:00
|
|
|
@handler listPersonaContentInbox
|
|
|
|
|
get /:id/content-inbox (ListPersonaContentInboxHandlerReq) returns (ListPersonaContentInboxData)
|
|
|
|
|
|
|
|
|
|
@handler listTopicCandidates
|
|
|
|
|
get /:id/topic-candidates (PersonaPath) returns (ListTopicCandidatesData)
|
|
|
|
|
|
|
|
|
|
@handler listContentPlans
|
|
|
|
|
get /:id/content-plans (PersonaPath) returns (ListContentPlansData)
|
|
|
|
|
|
|
|
|
|
@handler createContentPlan
|
|
|
|
|
post /:id/content-plans (CreateContentPlanHandlerReq) returns (ContentPlanData)
|
|
|
|
|
|
|
|
|
|
@handler updateContentPlan
|
|
|
|
|
patch /:id/content-plans/:contentPlanId (UpdateContentPlanHandlerReq) returns (ContentPlanData)
|
|
|
|
|
|
|
|
|
|
@handler createFeedbackEvent
|
|
|
|
|
post /:id/feedback-events (CreateFeedbackEventHandlerReq) returns (FeedbackEventData)
|
|
|
|
|
|
|
|
|
|
@handler createKnowledgeSource
|
|
|
|
|
post /:id/knowledge-sources (CreateKnowledgeSourceHandlerReq) returns (KnowledgeSourceData)
|
|
|
|
|
|
|
|
|
|
@handler listKnowledgeSources
|
|
|
|
|
get /:id/knowledge-sources (PersonaPath) returns (ListKnowledgeSourcesData)
|
|
|
|
|
|
|
|
|
|
@handler listKnowledgeChunks
|
|
|
|
|
get /:id/knowledge-chunks (PersonaPath) returns (ListKnowledgeChunksData)
|
|
|
|
|
|
|
|
|
|
@handler listFormulaPools
|
|
|
|
|
get /:id/formula-pools (PersonaPath) returns (ListFormulaPoolsData)
|
|
|
|
|
|
|
|
|
|
@handler createFormulaPool
|
|
|
|
|
post /:id/formula-pools (CreateFormulaPoolHandlerReq) returns (FormulaPoolData)
|
|
|
|
|
|
2026-06-26 08:37:04 +00:00
|
|
|
@handler generatePersonaCopyDraft
|
|
|
|
|
post /:id/copy-drafts/generate (GeneratePersonaCopyDraftHandlerReq) returns (GeneratePersonaCopyDraftData)
|
|
|
|
|
|
|
|
|
|
@handler updatePersonaCopyDraft
|
|
|
|
|
patch /:id/copy-drafts/:draftId (UpdateCopyDraftHandlerReq) returns (CopyDraftData)
|
|
|
|
|
|
|
|
|
|
@handler publishPersonaCopyDraft
|
|
|
|
|
post /:id/copy-drafts/:draftId/publish (PublishCopyDraftHandlerReq) returns (PublishCopyDraftData)
|
2026-06-28 08:28:42 +00:00
|
|
|
|
2026-07-06 06:13:14 +00:00
|
|
|
@handler schedulePersonaDrafts
|
|
|
|
|
post /:id/copy-drafts/schedule (SchedulePersonaDraftsHandlerReq) returns (ScheduleCopyDraftsData)
|
|
|
|
|
|
|
|
|
|
@handler schedulePersonaCopyDraft
|
|
|
|
|
post /:id/copy-drafts/:draftId/schedule (SchedulePersonaCopyDraftHandlerReq) returns (ScheduleCopyDraftsData)
|
|
|
|
|
|
|
|
|
|
@handler generateFromContentFormula
|
|
|
|
|
post /:id/content-formulas/:formulaId/generate (GenerateFromContentFormulaHandlerReq) returns (GenerateFromContentFormulaData)
|
|
|
|
|
|
|
|
|
|
@handler generatePersonaTopicMatrix
|
|
|
|
|
post /:id/topic-matrix/generate (GeneratePersonaTopicMatrixHandlerReq) returns (GeneratePersonaTopicMatrixData)
|
|
|
|
|
|
|
|
|
|
@handler startPersonaTopicMatrixJob
|
|
|
|
|
post /:id/topic-matrix/jobs (StartPersonaTopicMatrixJobHandlerReq) returns (StartPersonaTopicMatrixJobData)
|
|
|
|
|
|
|
|
|
|
@handler startPersonaFormulaDraftJob
|
|
|
|
|
post /:id/formula-draft/jobs (StartPersonaFormulaDraftJobHandlerReq) returns (StartPersonaFormulaDraftJobData)
|
|
|
|
|
|
|
|
|
|
@handler startPersonaRewriteDraftJob
|
|
|
|
|
post /:id/rewrite-draft/jobs (StartPersonaRewriteDraftJobHandlerReq) returns (StartPersonaRewriteDraftJobData)
|
|
|
|
|
|
2026-06-28 08:28:42 +00:00
|
|
|
@handler deletePersonaCopyDraft
|
|
|
|
|
delete /:id/copy-drafts/:draftId (CopyDraftPath) returns (DeleteCopyDraftData)
|
2026-07-06 06:13:14 +00:00
|
|
|
|
|
|
|
|
@handler prunePersonaCopyDrafts
|
|
|
|
|
post /:id/copy-drafts/prune (PrunePersonaCopyDraftsHandlerReq) returns (PrunePersonaCopyDraftsData)
|
|
|
|
|
|
|
|
|
|
@handler listStylePresets
|
|
|
|
|
get /:id/style-presets (PersonaPath) returns (ListStylePresetsData)
|
|
|
|
|
|
|
|
|
|
@handler upsertStylePreset
|
|
|
|
|
put /:id/style-presets/:presetId (UpsertStylePresetHandlerReq) returns (StylePresetData)
|
|
|
|
|
|
|
|
|
|
@handler deleteStylePreset
|
|
|
|
|
delete /:id/style-presets/:presetId (StylePresetPath)
|
|
|
|
|
}
|