
Siren
Deterministic visual marketing engine.
Community: Submitted by a user or imported; check the owner before granting accessOnlineNo sign-inGlobalFreeCan modify data
What it can do
What data it sees
Do you need an account
No: the server works without sign-in
Deterministic visual marketing engine. Your agent plans, renders, and posts on-brand campaigns.
Server tool list (21)
Raw names from tools/list. Only developers need these.
| get_account | Get the connected Siren workspace: plan, key scopes, auto-post setting, and daily limit. Call this first to learn what the account can do before generating. Empty asset_types / channels / connected_accounts lists mean UNRESTRICTED, not missing — never stop on them. Film renders need plan pro or above (empire/scale/pro). |
| list_runs | List the workspace's recent generation runs (newest first): status, brief, channel, asset URLs, and audience scores. |
| get_run | Get one run by id — full status, output text, asset URLs, impact and audience scores, and any error. Poll this after create_campaign or render_asset until status is terminal. After post_run, `posts[]` carries each platform's status and, once it fires, the live URL and the caption that went out. |
| create_campaign | Create a Siren campaign from a plain-language brief — the full pipeline: plan, on-brand copy, deterministic render, verify. Returns the run; poll get_run until it finishes. Spends credits (image 10, video 25; voice or music-only is the same 25). Pass output_type to pin a film (list_films has the catalog); omit it and Siren picks. Optional scheduled_at (ISO-8601) queues a sequential post (X → Instagram → TikTok, or platforms you pass) when the render succeeds — requires Allow posting. Fails with a 402 upgrade message if the plan or balance can't cover it. |
| list_films | Every live film master Siren can render: name, what it is, when to hire it, runtime, aspect, and whether this plan can render it. Films are deterministic MP4s; video renders need Pro or above. Read this before promising a specific film, then describe_film for its body. |
| describe_film | The full contract for one film: what it is and when to hire it, its body JSON Schema, a reference body, the seed envelope, media slots (which fields take image/video URLs), the brand prefills (colours, logo, screens) and the override rules. Call it before writing a render_asset body. |
| clarify_brief | Ask Siren's clarifier whether a brief is specific enough to generate from. Returns ready=true/false plus follow-up questions. Use before create_campaign when the user's request is vague. |
| render_asset | Render pre-formed SirenSeed bodies directly (advanced): deterministic template render, no planner. Each item: {output_type, channel, seed_body, archetype?, family?, surface?, caption?, voice_id?}. Prefer create_campaign unless the user has concrete seed JSON. Returns run ids — poll get_run for status. |
| upload_media | Store a photo or video the human wants in a post, from an https URL or base64. Returns a workspace-owned URL to put in any media slot of a film body (describe_film lists the slots) — the renderer reads it directly. Images: PNG/JPG/WebP up to 15 MB. Videos: MP4/MOV/WebM up to 200 MB. The same bytes are stored once (content-hashed). |
| post_run | Post a finished run's assets to the workspace's CONNECTED SOCIAL ACCOUNT. This is live, public distribution on the customer's channel — always confirm with the user before calling. Only works if the grant was authorised with posting allowed. Pass `caption` to own the words; it goes out verbatim. The call queues the post behind a short publish window (about two minutes, cancellable) rather than firing inline: poll get_run after that and read `posts[].url` for the live permalink and the caption that went out. |
| schedule_post | Schedule a finished run to post at scheduled_at (ISO-8601). Shows in the customer's local timezone. platforms: x, instagram, tiktok, linkedin, youtube, or everything. Posts fire sequentially. Requires Allow posting. Prefer this over post_run when the user names a time. On create_campaign you can pass scheduled_at instead. |
| get_brand_dna | Get this workspace's Brand DNA: name, overview, tagline, offer, features, products, audience, palette, logos. Not Brand Memory. |
| update_brand_dna | Patch Brand DNA. Send only keys to change. Nested bags (offer, product_map, icp) merge. Examples: {tagline, overview, offer: {product_name, one_liner, features, who_its_for, primary_cta}, product_map: {offerings, how_we_work}, icp: {who_buys, pains}}. Does not read or write Brand Memory. |
| list_product_screens | List the brand assets in Brand DNA: product photos, app screenshots, packaging. Each row has name, kind, description, use_when, tags, scan_status (scanning / ready / failed), device, theme, url. |
| upload_product_screen | Upload a brand asset (product photo, app screenshot, packaging) into Brand DNA and store it on R2. Pass image_url (https PNG/JPG/WebP) or image_base64. Two ways to file it: - Send `description` (and optionally kind, use_when, tags, name): Siren trusts your words and files the asset as-is. No read. - Send only the file: Gemini reads the picture and writes name, kind, description, use_when, tags itself. scan_status goes scanning → ready in about 8 seconds; poll list_product_screens. kind is free text ("product photo", "dashboard screenshot", "packaging"), there is no fixed list. A brief that names an asset ("advertise the pink handbag") pulls that file into the still. screen_type / device / theme only matter for device-framed screenshot masters. |
| update_product_screen | Edit an existing brand asset: name, description, kind, use_when, and the screenshot tags (screen_type, device, theme). |
| delete_product_screen | Remove a product screenshot from Brand DNA. Does not delete Brand Memory. |
| studio_templates | List Siren Studio's 33 React data-card types with family, description, and body schema. Use this before studio_card so the body matches. |
| studio_card | Render a Studio data card from a type + body. Deterministic React, no paint. Optional live post after render. Returns run_id, image url, and post url when posted. |
| studio_automate | Create a Studio profile on this API key. Returns generate curl and inbound hook URLs (Stripe, GitHub, Uptime Kuma, Product Hunt, generic). Passing delivery.social_account_ids turns on social delivery for the profile — that publishes, so it requires Allow posting. |
| studio_schedule | Render a Studio card then queue a ScheduledPost at scheduled_at. |