此 MCP 可以做什么
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creative concepts.
工具
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id', 'image_url'], 'properties': {'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to add the asset to. Get from list_brands.'}, 'image_url': {'type': 'string', 'format': 'uri', 'description': 'Public HTTPS URL to fetch. The pipeline downloads, vision-tags, stores in the brand-assets bucket, and inserts a row.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Max formulas to return (1-10, default 5).'}, 'vertical': {'type': 'string', 'description': 'Industry vertical to filter formulas. Examples: BEAUTY_SKINCARE, HEALTH_SUPPLEMENTS, FITNESS, FOOD_BEVERAGE, FASHION_APPAREL, SAAS_SOFTWARE, FINANCE_FINTECH, INFO_PRODUCTS, TECH_GADGETS. Omit for all verticals.'}, 'hook_type': {'type': 'string', 'description': 'Filter by opening hook subtype. Examples: CURIOSITY_SPIKE, IDENTITY_HOOK, CONTRADICTION_HOOK, DIRECT_QUESTION_HOOK, PAST_SELF_OPEN, DATA_POINT_START, PROVOCATION. Omit for all hook types.'}, 'algo_intent': {'type': 'string', 'description': 'Structural engine to filter by. Examples: PROBLEM_AGITATE_SOLVE, MECHANISM_REVEAL, TRANSFORMATION_ARC, SOCIAL_PROOF_STACK, COMPARISON_CONTRAST, URGENCY_SCARCITY. Omit for all intents.'}, 'creative_format': {'type': 'string', 'description': 'Creative format to filter by. Examples: TALKING_HEAD_BROLL, VOICEOVER_BROLL, UGC_TESTIMONIAL, PRODUCT_DEMO, SLIDESHOW_OVERLAY, INFLUENCER. Omit for all formats.'}, 'marketing_angle': {'type': 'string', 'description': 'Marketing angle to filter by. Examples: PROBLEM_SOLUTION, SOCIAL_PROOF_RESULTS, HOW_TO_TUTORIAL, INGREDIENT_SCIENCE, ASPIRATIONAL_IDENTITY, VALUE_STACK. Omit for all angles.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['agent_id', 'message'], 'properties': {'message': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'The user turn â\x80\x94 the message the caller wants the character to respond to. One-shot; not persisted as a conversation history unless the caller supplies thread_id continuity.'}, 'agent_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The Creative Agent preset id to call. Discover ids via list_creative_agent_presets. Workspace-authored agents are only callable from within the owning org; official templates (visibility=public_template) are callable from any org.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': "Optional Heista brand id (a.k.a. brief id). When provided, the runtime server-loads the multi-strategy brand summary via `loadMultiBrandContext` and injects it into the agent's system prompt as BRAND INTELLIGENCE. RLS-scoped read â\x80\x94 a brand outside the caller's workspace resolves to no summary (silent fall-through)."}, 'thread_id': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Optional continuity id round-tripped on the response. Callers manage their own thread state â\x80\x94 the runtime does NOT persist history for library calls (chat surface uses its own session table).'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats within 5 minutes, the cached response returns without re-charging.'}, 'working_context': {'type': 'object', 'properties': {'brand': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'logo_url': {'anyOf': [{'type': 'string', 'format': 'uri', 'maxLength': 2000}, {'type': 'null'}]}}}, {'type': 'null'}]}, 'documents': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'title': {'type': 'string', 'maxLength': 300, 'minLength': 1}}}, 'maxItems': 20}, 'strategies': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'title'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'title': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'offer_name': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'product_name': {'anyOf': [{'type': 'string', 'maxLength': 200}, {'type': 'null'}]}, 'is_product_page': {'type': 'boolean'}}}, 'maxItems': 10}, 'loadedPlaybook': {'anyOf': [{'type': 'object', 'required': ['id', 'name'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'name': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'imageUrl': {'anyOf': [{'type': 'string', 'format': 'uri', 'maxLength': 2000}, {'type': 'null'}]}}}, {'type': 'null'}]}}, 'description': "Optional Working Context labels â\x80\x94 brand pin, pinned strategies, pinned documents, loaded playbook. Rendered into the agent's system prompt as an IN SCOPE bullet block so the agent knows what the workspace has pinned. IDs must reference workspace-owned rows. For deeper brand intelligence, pass `brand_id` (server-resolved)."}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brief', 'count'], 'properties': {'brief': {'type': 'string', 'maxLength': 2000, 'minLength': 1, 'description': 'The creative brief â\x80\x94 what you want territory directions for. One sentence or short paragraph. Example: "Hero campaign for a sparkling water brand launching in Australia, positioned against soft drink as the everyday adult alternative".'}, 'count': {'type': 'integer', 'maximum': 6, 'minimum': 2, 'description': 'How many distinct creative territories to generate. Each will sit on different axis coordinates from the others â\x80\x94 different psychology, different feel, different world. 2-6.'}, 'medium': {'enum': ['tvc', 'billboard', 'ooh', 'activation', 'experiential', 'social', 'campaign', 'print', 'audio'], 'type': 'string', 'description': 'Optional medium â\x80\x94 switches the output shape. Omit â\x86\x92 territory cards (default exploration). `tvc` â\x86\x92 TVC scripts (hook + arc + resolve + sound + end line). `billboard` / `ooh` / `print` â\x86\x92 out-of-home concepts (visual + line + placement). `social` â\x86\x92 Reels / TikTok / Shorts concepts. `activation` / `experiential` â\x86\x92 activation concepts (space + journey + peak moment + takeaway). `audio` â\x86\x92 sonic / radio concepts. `campaign` â\x86\x92 full campaign platforms (insight â\x86\x92 big idea â\x86\x92 strategy â\x86\x92 visual world â\x86\x92 production roadmap). See the tool description for the full per-shape spec.'}, 'brand_id': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Optional Heista brand id (a.k.a. brief id) to ground the territories in. Get from list_brands or any create_powersource_* call. When provided, the engine pulls the brand intelligence (buyer tensions, voice, selling points) and uses it as the entry point into psychology axes. Omit for an unbranded creative exploration.'}, 'lens_hint': {'type': 'object', 'required': ['name', 'mechanism'], 'properties': {'name': {'type': 'string', 'maxLength': 200, 'description': 'The lens / playbook name (e.g. "Quiet Authority").'}, 'mechanism': {'type': 'string', 'maxLength': 1000, 'description': 'One-paragraph description of how the lens works â\x80\x94 its psychological engine.'}, 'constraints': {'type': 'array', 'items': {'type': 'string', 'maxLength': 200}, 'maxItems': 8, 'description': 'Optional list of constraints the lens enforces (e.g. ["never use celebrity endorsement", "always feature the product hero"]).'}}, 'description': 'Optional creative lens to constrain the direction. Applied throughout the ideation as a creative constraint. Use when an agent has already picked a playbook or signature move and wants territories under that lens.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats within 5 minutes, the original result is returned without re-charging.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['message'], 'properties': {'message': {'type': 'string', 'maxLength': 4000, 'minLength': 1, 'description': 'The principal\'s message to the Creative Worlds specialist. First turn: a brief or open question. Subsequent turns: refinement ("make #2 darker"), filtering ("summarise that"), extension ("build a tagline off it").'}, 'brand_id': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Optional Heista brand_id to ground the conversation in. Only honoured on the first turn of a new session (continuing sessions keep their original brand context).'}, 'session_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Pass the session_id returned from a previous chat_with_creative_worlds call to continue that conversation. Omit to start a new session â\x80\x94 the response will include a fresh session_id you should pass on every subsequent turn.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional Brand to attach this scan to. Get from list_brands. When omitted, the pipeline auto-resolves a brand by the context_url domain (if provided) or creates a standalone scan with no brand link.'}, 'file_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 10, 'description': 'Array of file IDs from a previous upload. Up to 10 files.'}, 'context_url': {'type': 'string', 'description': 'Optional website URL to layer live brand context on top of the documents (colors, fonts, current messaging).'}, 'document_urls': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'maxItems': 10, 'description': 'Array of public URLs pointing to documents (PDF, DOCX, TXT, MD). Up to 10 URLs.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats, the original result is returned without re-charging.'}, 'documents_inline': {'type': 'array', 'items': {'type': 'object', 'required': ['filename', 'content_base64'], 'properties': {'filename': {'type': 'string', 'description': 'Filename with extension (e.g., "brand-brief.md"). Use .md or .txt â\x80\x94 the pipeline reads text only.'}, 'content_base64': {'type': 'string', 'description': 'Base64-encoded file content. Max 5MB per file.'}}}, 'maxItems': 10, 'description': 'Inline documents as base64. Use when the user has uploaded a file into chat and no public URL exists. IMPORTANT: The synthesis pipeline reads TEXT ONLY â\x80\x94 it ignores images, diagrams, and visual layout. For any PDF or DOCX the user drops into chat: (1) read the file using your file-reading tools, (2) extract the text content preserving section headers and structure, (3) save as a clean .md or .txt file, (4) base64-encode the text file and submit here. Do NOT base64-encode the original PDF â\x80\x94 extract text first. This keeps payloads small (a 50-page brief extracts to ~50KB of text vs 5MB of PDF) and produces better results because the pipeline gets clean structured text instead of OCR-extracted noise from embedded images. Max 5MB per file, 10 files total across all input types.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'minLength': 1, 'description': 'Website URL to analyze. Supports any public website. REQUIRED.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional Brand to attach this scan to. Get from list_brands. When omitted, the pipeline auto-resolves a brand by the URL domain (creating one if needed).'}, 'file_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 10, 'description': 'Array of file IDs from a previous upload. Up to 10 files.'}, 'document_urls': {'type': 'array', 'items': {'type': 'string', 'format': 'uri'}, 'maxItems': 10, 'description': 'Array of public URLs pointing to documents (PDF, DOCX, TXT, MD). Up to 10 URLs.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable.'}, 'documents_inline': {'type': 'array', 'items': {'type': 'object', 'required': ['filename', 'content_base64'], 'properties': {'filename': {'type': 'string', 'description': 'Filename with extension. Use .md or .txt â\x80\x94 the pipeline reads text only.'}, 'content_base64': {'type': 'string', 'description': 'Base64-encoded file content. Max 5MB per file.'}}}, 'maxItems': 10, 'description': 'Inline documents as base64. The pipeline reads TEXT ONLY â\x80\x94 for any PDF or DOCX, extract the text content first using your file-reading tools, save as .md or .txt, then base64-encode and submit here. Supported formats: PDF, DOCX, TXT, MD. Max 5MB per file.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'description': 'Website URL to analyze. Supports any public website (e.g., gymshark.com, notion.so). Bare domains auto-resolve to https.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional Brand to attach this scan to. Get from list_brands. When omitted, the pipeline auto-resolves a brand by the scanned domain (creating one if needed) â\x80\x94 the addendum D6 default. Pass this when you have an existing brand_id (e.g. from a prior list_brands call) and want to guarantee linkage rather than relying on domain match.'}, 'webhook_url': {'type': 'string', 'format': 'uri', 'description': 'HTTPS URL to receive a POST notification when the scan completes or fails. Eliminates need for polling.'}, 'force_refresh': {'type': 'boolean', 'description': 'Force re-extraction of brand data even if cached. Use when a brand has rebranded or updated their website.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats, the original result is returned without re-charging.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf', 'slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The draft slug.'}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'The draft shelf.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf', 'slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The article slug.'}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'One canonical Creative Library shelf.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf'], 'properties': {'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'One canonical Creative Library shelf.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'default': 50, 'maximum': 100, 'minimum': 1, 'description': 'Page size, from 1 to 100.'}, 'offset': {'type': 'integer', 'default': 0, 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Zero-based page offset.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf', 'slug', 'expected_revision'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The reviewed draft slug.'}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'The reviewed draft shelf.'}, 'expected_revision': {'type': 'string', 'pattern': '^[a-f0-9]{64}$', 'description': 'The exact revision returned by creative_get_draft after human review.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['frontmatter', 'content'], 'properties': {'content': {'oneOf': [{'type': 'object', 'required': ['format', 'body'], 'properties': {'body': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'article'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'intro'], 'properties': {'intro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'outro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'workflow'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'body'], 'properties': {'body': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'trend'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'intro'], 'properties': {'intro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'outro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'resource'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'blocks'], 'properties': {'blocks': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'beat'], 'properties': {'beat': {'enum': ['context', 'challenge', 'move', 'whyItWorked', 'whatToSteal'], 'type': 'string'}, 'type': {'type': 'string', 'const': 'beat'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type'], 'properties': {'type': {'type': 'string', 'const': 'pull-stat'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type'], 'properties': {'type': {'type': 'string', 'const': 'before-after'}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 5}, 'format': {'type': 'string', 'const': 'case-study'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'intro'], 'properties': {'intro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'playbook'}, 'closing': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'playsIntro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'sequenceIntro': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'body'], 'properties': {'body': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'model-guide'}}, 'additionalProperties': False}, {'type': 'object', 'required': ['format', 'body'], 'properties': {'body': {'type': 'array', 'items': {'oneOf': [{'type': 'object', 'required': ['type', 'markdown'], 'properties': {'type': {'type': 'string', 'const': 'markdown'}, 'markdown': {'type': 'string', 'maxLength': 200000, 'minLength': 1}}, 'additionalProperties': False}, {'type': 'object', 'required': ['type', 'eyebrow', 'title', 'description', 'href'], 'properties': {'cta': {'type': 'string', 'maxLength': 80, 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'type': {'type': 'string', 'const': 'callout'}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'eyebrow': {'type': 'string', 'maxLength': 100, 'minLength': 1}, 'description': {'type': 'string', 'maxLength': 500, 'minLength': 1}}, 'additionalProperties': False}]}, 'maxItems': 100, 'minItems': 1}, 'format': {'type': 'string', 'const': 'comparison'}}, 'additionalProperties': False}]}, 'frontmatter': {'oneOf': [{'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'article'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'workflow'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'workflow'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'workflow': {'type': 'object', 'required': ['whatYouNeed', 'timeToComplete', 'steps', 'outcome'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'body'], 'properties': {'tip': {'type': 'string'}, 'body': {'type': 'string', 'minLength': 1}, 'title': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'minItems': 1}, 'outcome': {'type': 'string', 'minLength': 1}, 'whatYouNeed': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'totalTimeIso': {'type': 'string', 'pattern': '^P'}, 'timeToComplete': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'trend'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'trend': {'type': 'object', 'required': ['signals', 'whatToDoNow'], 'properties': {'signals': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'whatChanged', 'whyItMatters'], 'properties': {'title': {'type': 'string', 'minLength': 1}, 'whatChanged': {'type': 'string', 'minLength': 1}, 'whyItMatters': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'minItems': 1}, 'whatToDoNow': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'signalsHeading': {'type': 'string'}, 'whatToDoNowHeading': {'type': 'string'}}, 'additionalProperties': False}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'trend'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'resource'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'resource'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'resource': {'type': 'object', 'required': ['howToUse', 'checklists'], 'properties': {'howToUse': {'type': 'object', 'required': ['steps'], 'properties': {'steps': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'title': {'type': 'string'}}, 'additionalProperties': False}, 'freeTools': {'type': 'object', 'properties': {'label': {'type': 'string'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'checklists': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'items'], 'properties': {'items': {'type': 'array', 'items': {'type': 'object', 'required': ['text'], 'properties': {'text': {'type': 'string', 'minLength': 1}, 'detail': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 1}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string'}, 'numbered': {'type': 'boolean'}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 1}}, 'additionalProperties': False}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'caseStudy'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'case-study'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'caseStudy': {'type': 'object', 'required': ['beats'], 'properties': {'beats': {'type': 'object', 'required': ['context', 'challenge', 'move', 'whyItWorked', 'whatToSteal'], 'properties': {'move': {'type': 'string', 'minLength': 1}, 'context': {'type': 'string', 'minLength': 1}, 'challenge': {'type': 'string', 'minLength': 1}, 'whatToSteal': {'type': 'string', 'minLength': 1}, 'whyItWorked': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'pullStat': {'type': 'object', 'required': ['value', 'label'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'value': {'type': 'string', 'minLength': 1}, 'caveat': {'type': 'string'}}, 'additionalProperties': False}, 'beforeAfter': {'type': 'object', 'required': ['before', 'after'], 'properties': {'after': {'type': 'object', 'required': ['label', 'description'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'before': {'type': 'object', 'required': ['label', 'description'], 'properties': {'label': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'playbook'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'playbook'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'playbook': {'type': 'object', 'required': ['plays'], 'properties': {'plays': {'type': 'array', 'items': {'type': 'object', 'required': ['name', 'when', 'how'], 'properties': {'how': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'why': {'type': 'string'}, 'name': {'type': 'string', 'minLength': 1}, 'when': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'minItems': 1}}, 'additionalProperties': False}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'modelGuide'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'model-guide'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'modelGuide': {'type': 'object', 'required': ['spec', 'useWhen'], 'properties': {'spec': {'type': 'object', 'required': ['name', 'bestFor', 'strengths', 'limits', 'inputs', 'outputs', 'costInCredits', 'whenToUse'], 'properties': {'name': {'type': 'string', 'minLength': 1}, 'inputs': {'type': 'string', 'minLength': 1}, 'limits': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'bestFor': {'type': 'string', 'minLength': 1}, 'outputs': {'type': 'string', 'minLength': 1}, 'strengths': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}, 'whenToUse': {'type': 'string', 'minLength': 1}, 'costInCredits': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'useWhen': {'type': 'object', 'required': ['reachFor'], 'properties': {'skip': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'reachFor': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'minItems': 1}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}, {'type': 'object', 'required': ['library', 'title', 'slug', 'summary', 'published', 'status', 'shelf', 'audience', 'stage', 'format', 'comparison'], 'properties': {'faq': {'type': 'array', 'items': {'type': 'object', 'required': ['q', 'a'], 'properties': {'a': {'type': 'string', 'minLength': 1}, 'q': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'hero': {'type': 'object', 'required': ['eyebrow', 'title', 'description', 'href', 'cta'], 'properties': {'cta': {'type': 'string', 'minLength': 1}, 'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'eyebrow': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'score': {'type': 'object', 'required': ['demand', 'winnability', 'evidence', 'revenue', 'citeability', 'total'], 'properties': {'total': {'type': 'integer', 'maximum': 100, 'minimum': 0}, 'demand': {'type': 'integer', 'maximum': 30, 'minimum': 0}, 'revenue': {'type': 'integer', 'maximum': 15, 'minimum': 0}, 'evidence': {'type': 'integer', 'maximum': 20, 'minimum': 0}, 'citeability': {'type': 'integer', 'maximum': 10, 'minimum': 0}, 'winnability': {'type': 'integer', 'maximum': 25, 'minimum': 0}}, 'additionalProperties': False}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string'}, 'stage': {'type': 'array', 'items': {'enum': ['strategy', 'positioning', 'ideas', 'brief', 'copy', 'art-direction', 'production', 'talent', 'testing'], 'type': 'string'}, 'minItems': 1}, 'title': {'type': 'string', 'maxLength': 160, 'minLength': 1}, 'author': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'format': {'type': 'string', 'const': 'comparison'}, 'images': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'src', 'alt'], 'properties': {'id': {'type': 'string', 'minLength': 1}, 'alt': {'type': 'string', 'minLength': 1}, 'src': {'type': 'string'}, 'aspect': {'enum': ['16/9', '3/2', '4/3', '1/1', '3/4'], 'type': 'string'}, 'caption': {'type': 'string'}, 'variant': {'enum': ['banner', 'figure', 'grid'], 'type': 'string', 'default': 'figure'}}, 'additionalProperties': False}}, 'intent': {'enum': ['learn', 'do', 'compare'], 'type': 'string'}, 'status': {'enum': ['draft', 'published'], 'type': 'string'}, 'channel': {'type': 'array', 'items': {'enum': ['digital', 'paid-social', 'organic-social', 'ecommerce-pdp', 'email', 'web-landing', 'video', 'ooh-print', 'experiential', 'brand-experiences', 'integrated'], 'type': 'string'}}, 'library': {'type': 'string', 'const': 'creative'}, 'related': {'type': 'array', 'items': {'type': 'object', 'required': ['title', 'href'], 'properties': {'href': {'type': 'string', 'pattern': '^\\/(?!\\/)\\S*$'}, 'title': {'type': 'string', 'minLength': 1}, 'kicker': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}}, 'sources': {'type': 'array', 'items': {'type': 'object', 'required': ['label', 'href'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'href': {'type': 'string', 'pattern': '^https:\\/\\/\\S+$'}, 'label': {'type': 'string', 'maxLength': 200, 'minLength': 1}, 'publisher': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'summary': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'updated': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'audience': {'type': 'array', 'items': {'enum': ['d2c-brands', 'brands', 'ecommerce', 'agencies', 'creators', 'performance-marketers', 'creative-directors', 'founders', 'freelancers-consultants'], 'type': 'string'}, 'minItems': 1}, 'modelTest': {'type': 'object', 'required': ['model', 'versionOrDate', 'whatWeTested'], 'properties': {'model': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'whatWeTested': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'versionOrDate': {'type': 'string', 'maxLength': 60, 'minLength': 1}}, 'additionalProperties': False}, 'published': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'takeaways': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'aiAssisted': {'type': 'boolean'}, 'comparison': {'type': 'object', 'required': ['options', 'rows', 'verdict'], 'properties': {'rows': {'type': 'array', 'items': {'type': 'object', 'required': ['criterion', 'values'], 'properties': {'values': {'type': 'object', 'propertyNames': {'type': 'string'}, 'additionalProperties': {'type': 'string', 'minLength': 1}}, 'criterion': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'minItems': 1}, 'options': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'label'], 'properties': {'id': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}, 'label': {'type': 'string', 'minLength': 1}, 'description': {'type': 'string'}}, 'additionalProperties': False}, 'minItems': 2}, 'verdict': {'type': 'object', 'required': ['items'], 'properties': {'intro': {'type': 'string'}, 'items': {'type': 'array', 'items': {'type': 'object', 'required': ['optionLabel', 'when'], 'properties': {'when': {'type': 'string', 'minLength': 1}, 'optionLabel': {'type': 'string', 'minLength': 1}}, 'additionalProperties': False}, 'minItems': 1}, 'heading': {'type': 'string'}}, 'additionalProperties': False}}, 'additionalProperties': False}, 'reviewedBy': {'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 120, 'minLength': 1}, 'role': {'type': 'string', 'maxLength': 120, 'minLength': 1}}, 'additionalProperties': False}, 'corrections': {'type': 'array', 'items': {'type': 'object', 'required': ['date', 'note'], 'properties': {'date': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'note': {'type': 'string', 'maxLength': 600, 'minLength': 1}}, 'additionalProperties': False}, 'maxItems': 50}, 'methodology': {'type': 'string', 'maxLength': 1200, 'minLength': 1}, 'pointOfView': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'lastVerified': {'type': 'string', 'format': 'date', 'pattern': '^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$'}, 'relatedTools': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedHeists': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPreset': {'type': 'object', 'required': ['tab'], 'properties': {'tab': {'enum': ['visuals', 'styles', 'models', 'outfits'], 'type': 'string'}, 'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'additionalProperties': False}, 'searchQueries': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}, 'successMetric': {'type': 'string', 'maxLength': 400, 'minLength': 1}, 'evidencePacket': {'type': 'object', 'properties': {'job': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'query': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'reader': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'serpFailure': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'datedSources': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}, 'originalHeistaFact': {'type': 'string', 'maxLength': 600, 'minLength': 1}, 'claimsNeedingAHuman': {'type': 'array', 'items': {'type': 'string', 'maxLength': 300, 'minLength': 1}, 'maxItems': 30}}, 'additionalProperties': False}, 'relatedContent': {'type': 'array', 'items': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1}}, 'relatedPresets': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}}}, 'additionalProperties': False}]}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf', 'slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The live article slug.'}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'The live article shelf.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['shelf', 'slug', 'new_slug'], 'properties': {'slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The current slug.'}, 'shelf': {'enum': ['strategy', 'brand', 'ideas', 'copy', 'art-direction', 'product-photography', 'campaign-photography', 'creative-production', 'talent-styling', 'ai'], 'type': 'string', 'description': 'The article shelf. Slug changes do not move shelves.'}, 'new_slug': {'type': 'string', 'pattern': '^[a-z0-9]+(?:-[a-z0-9]+)*$', 'maxLength': 160, 'minLength': 1, 'description': 'The new slug. Must not end in a year.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'description': 'Video URL to decode. Supports: Facebook Ad Library, TikTok, Instagram Reels, YouTube Shorts, or direct .mp4 URL.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats, the original result is returned without re-charging.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'brand': {'type': 'string', 'maxLength': 100, 'description': 'Filter by brand name (case-insensitive partial match). Examples: "Gymshark", "AG1", "Huel". Omit for all brands.'}, 'limit': {'type': 'integer', 'maximum': 10, 'minimum': 1, 'description': 'Max decoded ads to return (1-10, default 5).'}, 'vertical': {'type': 'string', 'description': 'Industry vertical to filter decoded ads. Examples: BEAUTY_SKINCARE, HEALTH_SUPPLEMENTS, FITNESS, FOOD_BEVERAGE, FASHION_APPAREL, SAAS_SOFTWARE, FINANCE_FINTECH, INFO_PRODUCTS, TECH_GADGETS. Omit for all verticals.'}, 'hook_type': {'type': 'string', 'description': 'Filter by opening hook type. Examples: CURIOSITY_SPIKE, IDENTITY_HOOK, CONTRADICTION_HOOK, PROVOCATION, STORY_START, DIRECT_QUESTION_HOOK. Omit for all hook types.'}, 'algo_intent': {'type': 'string', 'description': 'Structural engine to filter by. Examples: PROBLEM_AGITATE_SOLVE, MECHANISM_REVEAL, TRANSFORMATION_ARC, SOCIAL_PROOF_STACK, COMPARISON_CONTRAST, URGENCY_SCARCITY. Omit for all intents.'}, 'creative_format': {'type': 'string', 'description': 'Creative format to filter by. Examples: TALKING_HEAD_BROLL, VOICEOVER_BROLL, UGC_TESTIMONIAL, PRODUCT_DEMO, SLIDESHOW_OVERLAY, INFLUENCER. Omit for all formats.'}, 'marketing_angle': {'type': 'string', 'description': 'Marketing angle to filter by. Examples: PROBLEM_SOLUTION, SOCIAL_PROOF_RESULTS, HOW_TO_TUTORIAL, INGREDIENT_SCIENCE, ASPIRATIONAL_IDENTITY, VALUE_STACK. Omit for all angles.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Asset to delete. Get from list_brand_assets.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Asset to delete. Get from list_saved_assets.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brief'], 'properties': {'brief': {'type': 'string', 'maxLength': 8000, 'minLength': 20, 'description': 'The research brief to send to the Head. Must be self-contained â\x80\x94 the Head sees only this string, no conversation history. Include entity, time window, scope, and unit of analysis explicitly. Be concrete: vague briefs produce vague output.'}, 'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': 'standard (default) uses production models in specialists; deep escalates to higher-capability models. Use deep when accuracy matters more than cost.'}, 'max_wait_seconds': {'type': 'integer', 'maximum': 900, 'minimum': 60, 'description': 'Hard cap on how long to wait for the Head session to complete. Default 270 (4.5 min). Heads typically complete in 2-5 min; raise this if you expect a deep research brief.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model (per _config/model-assignments.ts)."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable the specialist must return. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly (parent may summarize otherwise).'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which of its tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['objective', 'output_format', 'tool_guidance', 'boundaries'], 'properties': {'priority': {'enum': ['standard', 'deep'], 'type': 'string', 'description': "standard (default) uses the specialist's production model; deep uses its escalation model."}, 'objective': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'One sentence stating what "done" looks like â\x80\x94 the specific deliverable. From the four-part delegation contract (agent-authoring §5).'}, 'boundaries': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'In scope vs out of scope. Explicit OUT_OF_SCOPE clauses. Constraints (e.g. "do not spawn further subagents", "only Meta paid social").'}, 'output_format': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'The shape the specialist must return â\x80\x94 schema, template, or specific format. If verbatim-return needed, say so explicitly.'}, 'tool_guidance': {'type': 'string', 'maxLength': 1500, 'minLength': 10, 'description': 'How the specialist should approach this â\x80\x94 which tools to favor, effort budget in tool calls, query angles to prioritize.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_id', 'is_favorite'], 'properties': {'asset_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Asset to favorite or unfavorite.'}, 'is_favorite': {'type': 'boolean', 'description': 'true to favorite, false to unfavorite. favorited_at is set/cleared in lockstep.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 2000, 'description': 'Absolute URL to fetch. Used to drill into a specific source after search surfaces it. Must be http:// or https://. Private IPs and localhost are blocked (SSRF protection).'}, 'max_chars': {'type': 'integer', 'maximum': 50000, 'minimum': 100, 'description': 'Maximum characters of extracted content to return. Default 8000. Higher returns more text but costs more in agent tokens.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'anyOf': [{'type': 'number', 'const': 7}, {'type': 'number', 'const': 28}, {'type': 'number', 'const': 90}], 'description': 'Window in days: 7, 28, or 90. Default 7.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'anyOf': [{'type': 'number', 'const': 7}, {'type': 'number', 'const': 28}, {'type': 'number', 'const': 90}], 'description': 'Window in days: 7, 28, or 90. Default 7.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 20, hard cap 50).'}, 'path_prefix': {'type': 'string', 'maxLength': 120, 'description': 'Only include paths starting with this prefix (e.g. "/decode", "/intelligence", "/brands").'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'anyOf': [{'type': 'number', 'const': 7}, {'type': 'number', 'const': 28}, {'type': 'number', 'const': 90}], 'description': 'Window in days: 7, 28, or 90. Default 28.'}, 'metric': {'enum': ['pageviews'], 'type': 'string', 'description': 'Metric for the daily series. v1 supports pageviews (split by source category: ai_search / organic / social / direct / referral).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'bot': {'type': 'string', 'maxLength': 40, 'description': 'Filter to one bot (canonical names: gptbot, oai-searchbot, chatgpt-user, claudebot, claude-user, perplexitybot, perplexity-user, googlebot, bingbot, â\x80¦).'}, 'days': {'type': 'integer', 'maximum': 180, 'minimum': 1, 'description': 'Window in days (default 28, max 180 â\x80\x94 retention limit).'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max rows (default 25, hard cap 100).'}, 'group_by': {'enum': ['bot', 'page', 'date'], 'type': 'string', 'description': 'Aggregation: by bot (default â\x80\x94 which engines are crawling), by page (what they fetch), or by date (crawl cadence).'}, 'path_prefix': {'type': 'string', 'maxLength': 200, 'description': 'Filter: page path STARTS WITH this (e.g. "/creative/library"). Anchored â\x80\x94 this is the one you want. Prefer it over path_contains.'}, 'path_contains': {'type': 'string', 'maxLength': 200, 'description': 'Filter: page path contains this anywhere. Over-matches â\x80\x94 "/creative" also returns /creative-playbooks and /creative-development. Use path_prefix unless you deliberately want a substring.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['title', 'description'], 'properties': {'title': {'type': 'string', 'maxLength': 250, 'minLength': 4, 'description': 'Outcome-shaped title.'}, 'labels': {'type': 'array', 'items': {'type': 'string', 'minLength': 1}, 'maxItems': 6, 'description': 'Label names, e.g. ["Bug","SEO"]. Unknown names are dropped, not rejected.'}, 'priority': {'type': 'integer', 'maximum': 4, 'minimum': 0, 'description': '0 none, 1 urgent, 2 high, 3 medium, 4 low. Default 3.'}, 'description': {'type': 'string', 'maxLength': 20000, 'minLength': 1, 'description': 'Markdown. Say what is broken, how to reproduce it, and what you expected.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['slug'], 'properties': {'slug': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Brand report slug from fleet_list_brand_reports.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id_or_slug'], 'properties': {'id_or_slug': {'type': 'string', 'maxLength': 200, 'minLength': 1, 'description': 'Decode id (uuid) or public slug â\x80\x94 both appear in fleet_search_decoded_ads results.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['identifier'], 'properties': {'identifier': {'type': 'string', 'maxLength': 40, 'minLength': 1, 'description': 'Issue identifier like "HEI-14" (preferred) or the issue UUID.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['url'], 'properties': {'url': {'type': 'string', 'format': 'uri', 'maxLength': 500, 'description': 'Full heista.co URL to inspect (e.g. "https://www.heista.co/decode").'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['dimensions'], 'properties': {'end_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date. Default: 3 days ago (GSC lags ~2-3 days).'}, 'row_limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max rows (default 25, hard cap 100).'}, 'dimensions': {'type': 'array', 'items': {'enum': ['date', 'page', 'query', 'country', 'device', 'searchAppearance'], 'type': 'string'}, 'maxItems': 3, 'minItems': 1, 'description': 'Group-by dimensions, up to 3 (e.g. ["query"], ["page","query"], ["date"]). NOTE: including "query" omits anonymized/rare queries â\x80\x94 totals with ["date"] or ["page"] are more complete on low-traffic sites.'}, 'start_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date (YYYY-MM-DD). Default: 28 days ago. GSC holds ~16 months of history.'}, 'page_contains': {'type': 'string', 'maxLength': 200, 'description': 'Filter: page URL contains this string (e.g. "/decode").'}, 'query_contains': {'type': 'string', 'maxLength': 200, 'description': 'Filter: search query contains this string.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 28, 'minimum': 1, 'description': 'Window in days (max 28 â\x80\x94 GSC data lags ~2-3 days). Default 28.'}, 'page_prefix': {'type': 'string', 'maxLength': 120, 'description': 'Only include pages whose URL contains this path (e.g. "/decode").'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 28, 'minimum': 1, 'description': 'Window in days (max 28). Default 28.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 25, hard cap 50).'}, 'order_by': {'enum': ['clicks', 'impressions'], 'type': 'string', 'description': 'Sort key. Default clicks.'}, 'query_contains': {'type': 'string', 'maxLength': 120, 'description': 'Only include rows whose search query contains this text.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 28, 'minimum': 1, 'description': 'Window in days (max 28). Default 28.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 25, hard cap 50).'}, 'order_by': {'enum': ['clicks', 'impressions'], 'type': 'string', 'description': 'Sort key. Default clicks.'}, 'page_prefix': {'type': 'string', 'maxLength': 120, 'description': 'Only include pages whose URL contains this path.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 10, hard cap 50).'}, 'query': {'type': 'string', 'maxLength': 120, 'description': 'Filter by brand name (partial match).'}, 'offset': {'type': 'integer', 'maximum': 5000, 'minimum': 0, 'description': 'Pagination offset.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'kind': {'enum': ['weekly', 'category'], 'type': 'string', 'description': 'Filter by article kind.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 10, hard cap 50).'}, 'offset': {'type': 'integer', 'maximum': 5000, 'minimum': 0, 'description': 'Pagination offset.'}, 'vertical': {'type': 'string', 'maxLength': 120, 'description': 'Filter category articles by vertical.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'label': {'type': 'string', 'maxLength': 60, 'description': 'Filter by label name (e.g. "Bug", "Security", "SEO", "In-App Feedback").'}, 'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max rows (default 30, hard cap 100).'}, 'query': {'type': 'string', 'maxLength': 200, 'description': 'Text search over issue titles (case-insensitive).'}, 'state': {'type': 'string', 'maxLength': 40, 'description': 'Filter by workflow state name: "Backlog", "Todo", "In Progress", "In Review", or "Done".'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 90, 'minimum': 1, 'description': 'Signup cohort window in days (default 30, max 90).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 90, 'minimum': 1, 'description': 'Signup cohort window in days (max 90). Default 30.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 90, 'minimum': 1, 'description': 'Signup window in days (max 90). Default 7.'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 20, hard cap 50).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['email'], 'properties': {'email': {'type': 'string', 'format': 'email', 'pattern': "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$", 'description': 'The user email to look up.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'brand': {'type': 'string', 'maxLength': 120, 'description': 'Filter by brand name (partial match).'}, 'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max rows (default 10, hard cap 50).'}, 'query': {'type': 'string', 'maxLength': 200, 'description': 'Free-text match against ad name, tagline, and brand name.'}, 'offset': {'type': 'integer', 'maximum': 5000, 'minimum': 0, 'description': 'Pagination offset.'}, 'category': {'type': 'string', 'maxLength': 120, 'description': 'Filter by gallery category (exact match â\x80\x94 values from fleet_intel_stats / prior searches).'}, 'platform': {'type': 'string', 'maxLength': 60, 'description': 'Filter by platform (e.g. facebook, tiktok).'}, 'vertical': {'type': 'string', 'maxLength': 120, 'description': 'Filter by vertical classification (exact match).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'days': {'type': 'integer', 'maximum': 180, 'minimum': 1, 'description': 'Crawler-hit window in days (default 7, max 180 â\x80\x94 retention limit). GSC + orphan figures are always current-snapshot / trailing-28d.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['path'], 'properties': {'path': {'type': 'string', 'maxLength': 500, 'minLength': 1, 'description': 'Page path (e.g. "/decode/some-slug").'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Max rows (default 50, hard cap 200).'}, 'direction': {'enum': ['in', 'out'], 'type': 'string', 'description': '"in" = pages linking TO this path (default); "out" = pages this path links to.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Max rows (default 25, hard cap 100).'}, 'offset': {'type': 'integer', 'maximum': 10000, 'minimum': 0, 'description': 'Pagination offset.'}, 'status': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': -9007199254740991, 'description': 'Filter by HTTP status (e.g. 200, 308, 404).'}, 'path_prefix': {'type': 'string', 'maxLength': 200, 'description': 'Filter: path STARTS WITH this (e.g. "/creative/library"). Anchored â\x80\x94 prefer this. Filtering /creative by substring returns 77 pages; by prefix, 9.'}, 'missing_meta': {'type': 'boolean', 'description': 'Only pages missing a meta description.'}, 'orphans_only': {'type': 'boolean', 'description': 'Only pages with ZERO internal inlinks â\x80\x94 the pages Google has no path to discover.'}, 'path_contains': {'type': 'string', 'maxLength': 200, 'description': 'Filter: path contains this anywhere. Over-matches â\x80\x94 "/creative" also returns /creative-playbooks and /creative-development. Use path_prefix unless a substring is genuinely wanted.'}, 'max_word_count': {'type': 'integer', 'maximum': 100000, 'minimum': 0, 'description': 'Only pages at or below this visible word count (thin-content filter, e.g. 150).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['source_id', 'source_type', 'powersource_id'], 'properties': {'count': {'type': 'integer', 'maximum': 5, 'minimum': 1, 'description': 'Number of scripts to generate (1-5, default 1). Each script uses a different tension and selling point combination for variety.'}, 'tension': {'type': 'string', 'maxLength': 256, 'description': 'Lock to a specific behavioral tension from the PowerSource (e.g., "Frustration â\x86\x92 Relief"). Omit to let the system select the best match.'}, 'audience': {'type': 'string', 'maxLength': 128, 'description': 'Audience segment from the PowerSource. "buyer_profile" (default) uses the composite buyer. "audience_0", "audience_1", etc. target specific segments.'}, 'duration': {'type': 'integer', 'maximum': 120, 'minimum': 10, 'description': 'Target duration in seconds (remix mode only, 10-120). Blueprint mode locks to the source duration.'}, 'source_id': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'The ID of the structural source to write from. For source_type="decode": either a job_id from your own decode_ad call OR an id from decoder_intelligence (corpus ad). For source_type="formula": a formula id from adformula_intelligence.'}, 'voice_mode': {'enum': ['creator', 'brand'], 'type': 'string', 'description': 'Voice register for the script. "creator" (default) = authentic creator voice for UGC, PowerSource locks facts/tensions/selling points but NOT voice register. "brand" = full PowerSource brand voice for brand-owned content (website, OOH, brand films). Most ad scripts should use "creator".'}, 'script_mode': {'enum': ['blueprint', 'remix'], 'type': 'string', 'description': 'Script mode. "blueprint" (default) follows the source formula exactly â\x80\x94 same beat structure, same timing. "remix" uses the psychological architecture but writes original copy.'}, 'source_type': {'enum': ['decode', 'formula'], 'type': 'string', 'description': 'Type of structural source. "decode" = a single decoded ad (your own or from the corpus). "formula" = a clustered blueprint built from multiple winning ads.'}, 'powersource_id': {'type': 'string', 'maxLength': 128, 'minLength': 1, 'description': 'Identifier for the brand PowerSource that supplies voice, selling points, tensions, and audience. Accepts either a job_id from create_powersource_* or a brief_id from get_powersource â\x80\x94 both work.'}, 'selling_points': {'type': 'array', 'items': {'type': 'string', 'maxLength': 512}, 'maxItems': 5, 'description': 'Lock to specific selling points from the PowerSource (max 5). Omit to let the system select the best match for each beat.'}, 'idempotency_key': {'type': 'string', 'maxLength': 128, 'description': 'Optional unique key to make this call safely retryable. If the same key + org repeats, the original result is returned without re-charging.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to inspect. Get from list_brands.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Job ID returned by decode_ad. Call this tool to poll status or retrieve completed results.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'The job_id returned by a previous dispatch_<specialist>_async call.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['root_session_id'], 'properties': {'root_session_id': {'type': 'string', 'minLength': 1, 'description': 'A session_id from anywhere in the fleet tree â\x80\x94 root, Head, Mastermind, or specialist sub-node. The handler resolves to the actual root and walks the full subtree, so you do not need to know the root id specifically. Org-scoped: only sessions belonging to your org return data.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'vertical': {'type': 'string', 'description': 'Industry vertical to filter corpus patterns. Examples: BEAUTY_SKINCARE, HEALTH_SUPPLEMENTS, FITNESS, FOOD_BEVERAGE, FASHION_APPAREL, SAAS_SOFTWARE, FINANCE_FINTECH, INFO_PRODUCTS, TECH_GADGETS. Omit for all verticals.'}, 'hook_type': {'type': 'string', 'description': 'Specific hook type to retrieve patterns for. Examples: CURIOSITY_SPIKE, OPEN_LOOP_STATEMENT, HIDDEN_TRUTH_REVEAL, IDENTITY_HOOK, CONTRADICTION_HOOK, PROVOCATION, STORY_START, DIRECT_QUESTION_HOOK, CHALLENGE_INTRO, CONTRAST_SETUP. Omit to get the top performing types for the vertical.'}, 'marketing_angle': {'type': 'string', 'description': 'Marketing angle to filter by. Examples: PROBLEM_SOLUTION, SOCIAL_PROOF_RESULTS, HOW_TO_TUTORIAL, OFFER_URGENCY, ASPIRATIONAL_IDENTITY, VALUE_STACK. Omit for all angles.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Job ID returned by any create_powersource_* call. Use this to poll status or retrieve completed results.'}, 'include_raw': {'type': 'boolean', 'description': 'Internal-only. When true and the caller holds mcp:internal_admin, returns the un-merged brief bundle alongside the merged response. Silently ignored for non-admin callers â\x80\x94 no error is raised.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Asset to fetch. Get from list_saved_assets.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_ids'], 'properties': {'asset_ids': {'type': 'array', 'items': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$'}, 'maxItems': 50, 'minItems': 1, 'description': 'Up to 50 asset ids to fetch in one round-trip. Use when an agent needs to pull a pre-selected set of saves (e.g. resolving a saved_asset_picker declaration in a Heist). Missing/cross-workspace ids are silently dropped.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['powersource_id'], 'properties': {'powersource_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Strategy (PowerSource / brief) id. Get from list_strategies. Returns the full brand-merged bundle â\x80\x94 buyer profile, 12 behavioral tensions, angles, narrative, tone of voice, selling points, CTAs, proof, brand story, homepage data, offering. Same shape as get_powersource(data) but keyed by powersource_id (no job_id needed).'}, 'include_archived': {'type': 'boolean', 'description': 'Include archived strategies. Default false (archived strategies are excluded from agent reads â\x80\x94 same default as list_strategies).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['id'], 'properties': {'id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Preset id. Discover ids by calling the matching list_<type>_presets first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'type': {'enum': ['product', 'product_cutout', 'lifestyle', 'hero', 'ingredient', 'packaging', 'certification', 'before_after', 'logo', 'infographic', 'screenshot', 'video', 'general', 'retailer_badge', 'press_badge', 'partner_logo'], 'type': 'string', 'description': 'Filter by image type: logo, product, product_cutout, hero, lifestyle, ingredient, packaging, certification, before_after, infographic, screenshot, video, general.'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Page size. Default 50, max 200.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor returned as next_cursor on the previous page.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to list assets for. Get from list_brands.'}, 'product_name': {'type': 'string', 'description': 'Filter to assets the vision tagger read as this on-pack product name.'}, 'powersource_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Filter to assets discovered during this PowerSource scan.'}, 'is_primary_product': {'type': 'boolean', 'description': "Filter to only the scanned product's images (or its absence with false)."}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 20, max 100.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor returned as next_cursor on the previous page (created_at ISO timestamp).'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to list documents for. Get from list_brands.'}, 'doc_type': {'enum': ['voice_tone_doc', 'brand_guidelines', 'strategy_memo', 'brand_brief', 'pitch_deck', 'research_report', 'campaign_brief', 'tone_of_voice_synthesis', 'customer_interview', 'meeting_notes', 'press_release', 'campaign_retrospective', 'workshop_output', 'spreadsheet_data', 'internal_memo', 'legal_compliance', 'sales_script', 'founder_interview', 'general_reference'], 'type': 'string', 'description': 'Filter by classified document type. One of 19 values: voice_tone_doc, brand_guidelines, strategy_memo, brand_brief, pitch_deck, research_report, campaign_brief, tone_of_voice_synthesis, customer_interview, meeting_notes, press_release, campaign_retrospective, workshop_output, spreadsheet_data, internal_memo, legal_compliance, sales_script, founder_interview, general_reference.'}, 'indexing_status': {'enum': ['pending', 'running', 'indexed', 'error'], 'type': 'string', 'description': 'Filter by indexing pipeline state. Use "indexed" to only see fully-processed docs ready to read.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'include_all': {'type': 'boolean', 'description': 'When true, returns transient (status="creating") and signal-less draft brands too. Default false matches the picker dropdown â\x80\x94 only confirmed/draft brands with real data.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to list projects for. Get from list_brands.'}, 'include_archived': {'type': 'boolean', 'description': 'Include archived projects. Default false.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Tag filter. Default mode is `any` (OR). Switch to `all` with tags_mode.'}, 'limit': {'type': 'integer', 'maximum': 200, 'minimum': 1, 'description': 'Page size. Default 50, max 200.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor returned as next_cursor on the previous page.'}, 'search': {'type': 'string', 'description': 'Full-text search on title + body + tags.'}, 'formats': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Multi-select format pills within a category. e.g. for COPY: ["ad-script","hook"]. See save_asset description for the full per-category enum.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Limit to one brand.'}, 'brief_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Limit to one PowerSource (brief).'}, 'category': {'enum': ['STRATEGY', 'IDEAS', 'COPY', 'VISUALS', 'MOTION', 'BRIEFS'], 'type': 'string', 'description': 'Tab filter. STRATEGY (positioning, brand platform), IDEAS (hooks, concepts, territories), COPY (ad scripts, hooks, campaign copy), VISUALS (static ads, product, lifestyle imagery), MOTION (talking heads, b-roll, lifestyle video), BRIEFS (creator briefs â\x80\x94 backed by a separate table; reads include share URLs). Omit to read every category in one merged stream.'}, 'tags_mode': {'enum': ['any', 'all'], 'type': 'string', 'description': 'How to combine tags. Default `any` (overlap). `all` requires every tag.'}, 'created_by': {'type': 'string', 'description': 'User id or the literal "me". When called via OAuth, "me" resolves to the caller. API-key callers MUST pass an explicit user id (no caller identity).'}, 'favorites_only': {'type': 'boolean', 'description': 'Restrict to favorited assets only.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'type': {'enum': ['foundation', 'registers', 'models', 'methodologies', 'craft', 'all'], 'type': 'string', 'description': 'Filter by skill type. "foundation" = always-on craft baseline per domain. "registers" = router-table over a references/ folder (e.g. cinema-mode, lighting). "methodologies" = how-to skills for specific job types. "models" = per-versioned-model profile (e.g. google-nano-banana-pro).'}, 'domain': {'enum': ['shared', 'image', 'video', 'research', 'strategy', 'copy', 'creative', 'generation', 'all'], 'type': 'string', 'description': 'Filter by domain. Use "all" or omit to get every skill. Available domains depend on what has been authored; current live domains include shared, image, video. Authoring will add research, strategy, copy, creative, generation as the fleet grows.'}, 'source_folder': {'enum': ['managed-agents', 'chat-agent', 'all'], 'type': 'string', 'description': 'Filter by source folder. "managed-agents" = fleet skills (Mastermind, Heads Of, fleet specialists). "chat-agent" = chat-surface lenses. "all" or omit to get everything. Folder is organisation only; any skill can be attached by any agent via skill_id.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 20, max 100.'}, 'cursor': {'type': 'string', 'description': 'Pagination cursor returned as next_cursor on the previous page.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand to list strategies for. Get from list_brands.'}, 'include_archived': {'type': 'boolean', 'description': 'Include archived strategies. Default false.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['powersource_id'], 'properties': {'powersource_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Strategy (PowerSource / brief) id. Get from list_strategies. Returns the buyer-decoder archetype plus up to 3 primary_audience segments.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['powersource_id'], 'properties': {'powersource_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Strategy (PowerSource / brief) id. Get from list_strategies. Returns the synthesized tone-of-voice (at most one entry today; shape is list-stable for future multi-tone bundles).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 100, 'minimum': 1, 'description': 'Page size. Default 24, max 100.'}, 'offset': {'type': 'integer', 'maximum': 9007199254740991, 'minimum': 0, 'description': 'Offset for paging through results. Default 0.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Optional brand_id to scope workspace presets to. Get from list_brands. Official presets are not brand-scoped and are unaffected by this filter.'}, 'only_official': {'type': 'boolean', 'description': 'When true, hide workspace (user-created) presets and only return Heista-curated (official) presets. Mutually exclusive with only_workspace.'}, 'only_workspace': {'type': 'boolean', 'description': 'When true, hide Heista-curated (official) presets and only return workspace (user-created) presets. Mutually exclusive with only_official.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['name'], 'properties': {'name': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Canonical skill name in dot-notation (e.g. "research.foundation", "research.methodologies.desk-synthesis", "shared.registers.cinema-mode"). Find via list_skills first.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['skill_name', 'reference_path'], 'properties': {'skill_name': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Parent skill name in dot-notation (e.g. "shared.registers.cinema-mode"). Only register-type skills have references/; foundations and methodologies are inline content only.'}, 'reference_path': {'type': 'string', 'maxLength': 256, 'minLength': 1, 'description': 'Reference filename within the skill\'s references/ folder (e.g. "m1-narrative.md"). Find via the parent SKILL.md router table. Path-traversal protected â\x80\x94 must be a plain filename, no "..", no absolute paths.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 1500, 'minLength': 3, 'description': 'Search query. Phrase as a natural-language question or precise topic description. The research agent has already done question decomposition â\x80\x94 this is one focused query, not a multi-question batch.'}, 'recency_filter': {'enum': ['hour', 'day', 'week', 'month', 'year'], 'type': 'string', 'description': 'Limit results to content published within this window. Use for fast-decay topics (model capabilities, platform algo changes, ad-format performance) per research.foundation §5. Omit for slow-decay topics (buyer psychology, established frameworks).'}, 'search_domain_filter': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Restrict search to these domains (e.g. ["motionapp.com", "about.fb.com"]). Use when triangulating against known-authoritative sources, or when evidence-querying for a specific named brand/publication.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['document_id'], 'properties': {'document_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Document to read. Get from list_brand_documents.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['brand_id'], 'properties': {'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand whose unreviewed assets should be re-run through the vision tagger. Only assets with vision_classified=false are processed. Get from list_brands.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['asset_id'], 'properties': {'asset_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Asset to re-classify. Get from list_brand_assets.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['category', 'format', 'source', 'title'], 'properties': {'tags': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Free-form tags for filtering and search.'}, 'title': {'type': 'string', 'description': 'Card title â\x80\x94 what shows in /assets.'}, 'format': {'type': 'string', 'description': 'Per-category format. STRATEGY: positioning, brand-platform, campaign-strategy, strategic-doc. IDEAS: hook, concept, big-idea, territory. COPY: ad-script, hook, campaign-copy. VISUALS: static-ad, product, lifestyle, hero, moodboard, packaging, logo. MOTION: talking-head, b-roll, product-motion, brand-lifestyle.'}, 'source': {'type': 'object', 'required': ['pattern'], 'properties': {'pattern': {'enum': ['direct', 'highlight', 'tool', 'document'], 'type': 'string', 'description': 'How the save was created. `direct` for explicit save action.'}, 'heist_slug': {'type': 'string', 'description': 'Source Heist slug â\x80\x94 e.g. "adscript", "hooks", "creative-director".'}, 'message_id': {'type': 'string', 'description': 'Optional source message id (for highlight-from-chat saves).'}, 'session_id': {'type': 'string', 'description': 'Optional source session id.'}}, 'description': 'Save attribution.'}, 'brand_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Brand the asset is for. Resolved from brief_id when omitted.'}, 'brief_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'PowerSource (brief) the asset was generated against.'}, 'category': {'enum': ['STRATEGY', 'IDEAS', 'COPY', 'VISUALS', 'MOTION'], 'type': 'string', 'description': 'One of STRATEGY, IDEAS, COPY, VISUALS, MOTION. BRIEFS is not accepted â\x80\x94 briefs live in the creator_briefs table via the briefs API.'}, 'metadata': {'type': 'object', 'description': 'Type-specific bag â\x80\x94 duration, image dimensions, model used, beat count, etc.', 'propertyNames': {'type': 'string'}, 'additionalProperties': {}}, 'body_html': {'type': 'string', 'description': 'Rich-text body where the asset carries structured markup.'}, 'body_text': {'type': 'string', 'description': 'Primary text body for STRATEGY / IDEAS / COPY saves.'}, 'media_url': {'type': 'string', 'format': 'uri', 'description': 'Direct media URL for VISUALS / MOTION (external host).'}, 'parent_id': {'type': 'string', 'format': 'uuid', 'pattern': '^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$', 'description': 'Parent asset id for variations grouped under one save set.'}, 'thumb_url': {'type': 'string', 'format': 'uri', 'description': 'Card thumbnail URL.'}, 'media_storage_path': {'type': 'string', 'description': 'Storage path inside the private `saved-assets` bucket. Obtain via the /api/saved-assets/upload-url route (REST only; no MCP upload tool yet).'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 1500, 'minLength': 3, 'description': 'Search query. Phrase as a natural-language question or precise topic description. The research agent has already done question decomposition â\x80\x94 this is one focused query, not a multi-question batch.'}, 'after_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date (YYYY-MM-DD). Restrict results to content published after this date. Use for fast-decay topics (model capabilities, platform algo changes, ad-format performance) per research.foundation §5. Omit for slow-decay topics (buyer psychology, established frameworks).'}, 'max_results': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Maximum number of results to return. Default 10. Higher counts return more sources but cost more in tokens â\x80\x94 keep at 10 for general use.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 1500, 'minLength': 3, 'description': 'Search query. Phrase as natural-language. Focused on what people are SAYING â\x80\x94 practitioner voice, named-operator discourse, community reaction. Not a general fact-check query.'}, 'platforms': {'type': 'array', 'items': {'enum': ['reddit', 'twitter', 'x', 'linkedin', 'substack', 'facebook', 'youtube', 'instagram', 'tiktok', 'mastodon', 'threads', 'discord'], 'type': 'string'}, 'maxItems': 8, 'minItems': 1, 'description': 'Limit search to these platforms. Use ["reddit"] for r/* threads, ["x","twitter"] for X posts, ["substack"] for named essays. Omit to let the search engine choose. Per social-listening-synthesis §3 sample â\x89¥3 platforms per brief â\x80\x94 pass at least 3 here for multi-platform discourse mapping.'}, 'after_date': {'type': 'string', 'pattern': '^\\d{4}-\\d{2}-\\d{2}$', 'description': 'ISO date (YYYY-MM-DD). Restrict to content after this date. Use for recency-sharp community signal mapping.'}, 'max_results': {'type': 'integer', 'maximum': 20, 'minimum': 1, 'description': 'Maximum results. Default 10.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'query': {'type': 'string', 'maxLength': 1500, 'minLength': 3, 'description': 'Research query. Phrase as a precise factual question â\x80\x94 what number, what claim, what methodology. The research agent has already decomposed the brief; this is one focused query.'}, 'recency_filter': {'enum': ['hour', 'day', 'week', 'month', 'year'], 'type': 'string', 'description': 'Limit results to content published within this window. Use for recent earnings, recent regulatory filings, recent industry reports.'}, 'search_domain_filter': {'type': 'array', 'items': {'type': 'string'}, 'maxItems': 10, 'description': 'Restrict to these domains (e.g. ["investor.atmeta.com", "sec.gov"]). Use when triangulating against known T1 sources or specific authoritative publications.'}}}
输入模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['query'], 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'How many skills to return. Default 15.'}, 'query': {'type': 'string', 'maxLength': 2000, 'minLength': 2, 'description': 'The SITUATION you need a skill for, in your own words â\x80\x94 a brief, a job, a problem. Not a keyword. "a packshot of a serum bottle on white for a marketplace listing" finds far more than "product".'}, 'families': {'type': 'array', 'items': {'enum': ['image', 'fleet', 'playbook', 'agent', 'agent-skill'], 'type': 'string'}, 'description': 'Restrict to these libraries. Omit to search everything. "image" = Image craft â\x80\x94 how a KIND of image is made well. "fleet" = Fleet skills â\x80\x94 foundations, registers and model briefings. "playbook" = Heista DNA â\x80\x94 creative playbooks a chat agent wears as a lens. "agent" = Creative agents â\x80\x94 callable workspace agents with their own character. "agent-skill" = Agent skills â\x80\x94 additive craft stacked on top of an agent identity.'}}}
输出模式
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['skills', 'returned', 'families_searched', 'unavailable', 'ranked', 'took_ms'], 'properties': {'ranked': {'type': 'boolean'}, 'skills': {'type': 'array', 'items': {'type': 'object', 'required': ['id', 'family', 'group', 'use_when', 'decides', 'needs', 'untrusted_text'], 'properties': {'id': {'type': 'string'}, 'group': {'type': 'string'}, 'needs': {'type': 'array', 'items': {'type': 'string'}}, 'family': {'type': 'string'}, 'decides': {'type': 'array', 'items': {'type': 'string'}}, 'use_when': {'type': 'string'}, 'untrusted_text': {'type': 'boolean'}}, 'additionalProperties': False}}, 'took_ms': {'type': 'number'}, 'returned': {'type': 'number'}, 'unavailable': {'type': 'array', 'items': {'type': 'object', 'required': ['family', 'reason'], 'properties': {'family': {'type': 'string'}, 'reason': {'type': 'string'}}, 'additionalProperties': False}}, 'families_searched': {'type': 'array', 'items': {'type': 'string'}}}, 'additionalProperties': False}
近期工具变更
类似的 MCP 服务器
VarynForge
Supports SEO research and content planning through niche analysis, competitor and keyword research, opportunity discovery, and wr…
AfterLaunch: the agentic growth marketing engine
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels,…
Jargon Translator
Provides corporate-jargon translation, AI brand visibility checks, AI crawler indexing files, and routed research across structur…
particle-pro
Searches and analyzes podcast episodes, transcripts, speakers, companies, topics, clips, rankings, sponsorships, and entity menti…
Niche — Editorial Intelligence
Discovers and ranks emerging stories, proposes editorial angles, generates platform-specific content, renders media, and supports…
BetterPost
Gathers timely stories from news, web, and social sources and generates, transforms, and manages publishable content.
agents
Offers paid agents for brand visibility checks, web data extraction, webpage reading, marketing video production, and deliverable…
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…