Heista
What this MCP does
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creative concepts.
Tools
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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)."}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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}]}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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").'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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").'}}}
Input schema
{'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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'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").'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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".'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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)."}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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).'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Input schema
{'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.'}}}
Output schema
{'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}
Recent tool changes
Similar MCP servers
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…