Gentic Landing Pages — Documentation

Let any AI agent generate landing-page HTML with Claude Opus 4.7, promote drafts to live URLs on per-brand subdomains under gentic.run (or your own custom domain), iterate with cheap targeted patches, roll back to any prior version, and capture leads — all through one MCP server. No code editors, no hosting config, no CMS. Describe what you want and ship it.

1. Getting Started

Sign Up & Get Your API Key

Before you can use Gentic Landing Pages, you need an API key to authenticate your requests.

  1. Go to gentic.co/landing-pages and create an account.
  2. Create an organization from your dashboard. API keys and billing are scoped to the organization.
  3. Generate an API key and use it as a Bearer token in your MCP client.

2. Connecting to the MCP Server

The server is available at https://mcp.gentic.co/landing-pages. For Claude Code:

claude mcp add gentic-landing-pages \
  --transport http \
  https://mcp.gentic.co/landing-pages \
  --header "Authorization: Bearer YOUR_API_KEY"

For Claude Web and ChatGPT you can also connect via OAuth — no API key needed. See the connect section on the landing page for other MCP clients (n8n, OpenClaw).

3. Agent Skill

For the best results, pair the MCP server with the Gentic Landing Pages agent skill. The MCP server gives your agent tool access; the skill teaches it the optimal workflow order. Both the raw SKILL.md and a ready-to-upload .skill bundle are generated on demand from the live manifest, so they always reflect the current tools and pricing.

Add the skill directly via URL:

https://gentic.co/landing-pages/SKILL.md

Or upload a .skill bundle to Claude Managed Agents:

https://gentic.co/landing-pages/gentic-landing-pages.skill

Download this file and upload it wherever Claude Managed Agents asks for a .skill file. It's a zip bundle generated on demand from the latest SKILL.md.

4. When to Apply

  • User wants to create a landing page, splash page, or coming-soon page.
  • User wants the agent to generate the landing-page HTML from a brief (rather than pasting hand-written markup).
  • User wants to deploy a page to a live URL without setting up hosting.
  • User wants to clone or remix an existing web page as a landing page.
  • User wants to collect email leads from a landing page.
  • User wants to query or export leads collected from their pages.
  • User wants to make small targeted edits to a live page (copy fixes, image swaps, color tweaks).
  • User describes a change in prose — e.g. 'add a testimonial section after the hero', 'remove the pricing block' — rather than spelling out the exact strings to replace.
  • User wants to fully rewrite or restructure a live landing page.
  • User wants to see the version history of a deployed page, inspect a prior HTML revision, or roll back to a previous version.
  • User wants brand colors, fonts, and voice applied consistently across all landing pages for an idea.
  • User wants to extract a canonical brand guidelines document (colors, typography, voice, imagery, aesthetic) from a brand's public website, or look up a previously extracted record to inform page design.
  • User wants to serve landing pages from their own custom domain (e.g. launch.acme.com) instead of a gentic.run subdomain.
  • User wants to claim a brand subdomain under gentic.run (e.g. `pistash.gentic.run`) so different brands the user runs each get their own host.
  • User wants to see which subdomains the org has already claimed, or release a brand subdomain that's no longer in use.

5. Workflow

  1. 1. Pull brand guidelines from an existing site (optional)

    If the user already has a brand online (their own, or a reference), call `get_brand_guidelines` (free) with a `domain` or `url` to read an existing record. If nothing is stored, run `extract_brand_guidelines` (**$3/call, async — pass `webhook_url`**) to crawl key pages of the brand's public site, combine HTML/CSS parsing with vision-model analysis, and write a canonical document (colors, typography, voice, imagery, aesthetic direction, heritage, generative guardrails with source + confidence + evidence per field). Feed the returned colors/fonts/voice into `save_brand_style_guide` for an idea, or directly into the landing page HTML prompt.

  2. 2. Set up a brand style guide with `save_brand_style_guide` (free, optional)

    Pass an `idea_slug` plus any subset of brand fields — `primary_color`, `secondary_color`, `accent_color`, `heading_font`, `body_font`, `voice`, `personality_traits`, `visual_mood`, `logo_direction`. Omitted fields keep their current value (if a guide already exists). Once saved, any landing page deployed (or replaced) with that `idea_slug` automatically gets the brand CSS injected. This is the same tool exposed by the Startup MCP — set the guide there while exploring the idea, then reuse it for every page.

  3. 3. Fetch a reference page with `fetch_rendered_page` (10¢/call)

    Renders the target URL with full JavaScript execution and returns the complete DOM HTML. Use this when the user wants to clone or draw inspiration from an existing page. The rendered HTML can be passed directly to `deploy_landing_page` after modification. Unlike plain fetch, this captures SPAs, dynamic content, and JS-rendered layouts.

  4. 4. Manage brand subdomains: `claim_subdomain`, `list_subdomains`, `release_subdomain` (free)

    Each org gets its original slug auto-claimed as its default subdomain (`{org-slug}.gentic.run`). Call `claim_subdomain` with a `subdomain` label (3-63 chars, lowercase alphanumeric + hyphens; reserved labels like `www`, `api`, `app`, `admin`, `mail`, `assets`, `static`, `cdn`, `mcp`, `auth`, `docs`, `blog`, `dashboard`, `console` are rejected) to reserve additional brand hosts under gentic.run — useful when one org runs multiple brands and wants each on its own subdomain. Subdomains are globally unique across orgs; collisions return a structured `taken` error so the agent can suggest a variant. Use `list_subdomains` to see everything the org owns (the entry with `is_default: true` is the auto-claimed org slug and cannot be released; each entry includes `created_at`). `release_subdomain` frees a label, but refuses if any active landing page is still pinned to it — delete or migrate those pages first.

  5. 5. Generate HTML with `generate_landing_page` ($7.50/call, async)

    Pass a freeform `brief` describing the page — purpose, audience, sections, voice, calls-to-action — and Claude Opus 4.7 produces a complete, self-contained HTML document on a Modal worker. Returns immediately with a `job_id` and a `draft_id`. Polls aren't required; the user is emailed when the job completes (typically 1–5 minutes), and the draft can be inspected via `list_asset_jobs(type='landing_page')`. Optionally pass `idea_slug` (drives colors/fonts/tone from the saved brand style guide), `reference_url` (preferred — uses canonical brand guidelines and reproduces the original's structure when cloning), `base_html` (iterate on existing markup instead of regenerating), and `style_hints` (free-form overrides). $7.50 is charged **only when generation succeeds**. Promote the draft with `deploy_landing_page(draft_id=...)` (25¢) or `replace_landing_page(draft_id=...)` (25¢).

  6. 6. Deploy with `deploy_landing_page` (25¢ from a draft, $7.50 from raw HTML)

    Provide a `slug` (lowercase, alphanumeric + hyphens, 3–64 chars) and a `title`. Then either pass `draft_id` from `generate_landing_page` (**preferred — 25¢**, the server fetches the draft HTML from S3 and promotes it live) or pass complete self-contained `html` directly (legacy raw-html path — $7.50). `draft_id` and `html` are mutually exclusive. Optionally pass `subdomain` to host the page under a specific brand host (must be claimed by your org). Subdomain precedence when omitted: (1) the idea's auto-claimed subdomain when `idea_slug` is provided and the idea has one, (2) the org's default subdomain. Pass `idea_slug` to inject the idea's brand style guide CSS, or `ignore_brand_style_guide: true` to skip. Also optional: `description` for metadata and `reference_url` for provenance. On the raw-html path, the document must be complete — inline all styles and scripts. The page goes live immediately at `{subdomain}.gentic.run/{slug}` and the response includes `subdomain` + `url` reflecting the actual host. Slug collisions are scoped per subdomain. Pass `on_conflict`: `"fail"` (default) throws a structured `slug_taken` error with `suggested_slug` + `existing_page_id`; `"suffix"` auto-appends `-2`, `-3`, … and returns `original_slug` + `slug_resolution: "suffix"`.

  7. 7. Fetch current HTML with `get_landing_page_html` (free)

    Pass a `page_id` to read back the live HTML plus a `content_hash`. Always call this before `patch_landing_page` so your edits are authored against the current version — and pass the returned `content_hash` as `expected_content_hash` on the patch for optimistic concurrency (prevents clobbering edits from another agent).

  8. 8. Apply small mechanical edits with `patch_landing_page` (50¢/call)

    Use this when **you can spell out the exact old/new strings** — copy fixes, image src swaps, color tweaks. Pass `page_id` and an `edits` array of `{ old_string, new_string, replace_all? }`. Each `old_string` must appear exactly once in the HTML (or set `replace_all: true`) — include enough surrounding context to make it unique. Pass `new_string: ""` to delete the matched substring. Edits apply sequentially; each sees the result of prior edits. Optionally pass `expected_content_hash` from `get_landing_page_html` for concurrency safety. For prose-described changes ("add a testimonial section after the hero"), reach for `edit_landing_page` ($1) instead — it has Gemini compute the diff for you.

  9. 9. Describe edits in prose with `edit_landing_page` ($1/call)

    Use this when the user describes a change in natural language — "add a 3-card testimonial section after the hero", "remove the pricing block", "swap the CTA from 'Sign up' to 'Get early access' everywhere". Pass `page_id` and a freeform `brief`. The server fetches the live HTML, asks Gemini to compute minimal-diff string-replacement edits, and applies them. Cheaper than `replace_landing_page` (full Opus rewrite, 25¢ from a draft / $7.50 raw) and more capable than `patch_landing_page` (50¢, mechanical only). Optionally pass `expected_content_hash` from `get_landing_page_html` for concurrency safety. **Tier picker:** mechanical and you know the strings → `patch_landing_page` (50¢). Prose-described targeted change → `edit_landing_page` ($1). Layout overhaul or full rewrite → `replace_landing_page`.

  10. 10. Full rewrites with `replace_landing_page` (25¢ from a draft, $7.50 from raw HTML)

    For layout changes, major restructures, or metadata-only updates, pass `page_id` plus either a `draft_id` from `generate_landing_page` (**preferred — 25¢**) or complete `html` (legacy — $7.50). `title` and `description` are optional. Omit both `draft_id` and `html` to update just metadata. Supports `idea_slug` and `ignore_brand_style_guide` for brand CSS injection. Reach for this only when `patch_landing_page` (50¢) won't cut it.

  11. 11. Browse history with `list_landing_page_versions` and `get_landing_page_version` (free)

    Every `deploy`, `replace`, `patch`, and `restore` writes an immutable HTML version. Call `list_landing_page_versions` with a `page_id` to get every version's `version_id`, `created_at`, content hash, byte size, and `source` (`deploy` / `replace` / `patch` / `restore`). Call `get_landing_page_version` with `page_id` + `version_id` to fetch the historical HTML for inspection or diffing — useful before deciding what to roll back to.

  12. 12. Roll back with `restore_landing_page_version` (25¢/call)

    Pass `page_id` + `version_id` (from `list_landing_page_versions`) to revert the page to that historical HTML. The restore writes a **new** immutable version (`source: "restore"`) pointing at the historical content and promotes it to the live URL — the prior current version stays in history, so a restore is itself reversible.

  13. 13. Deprecated: `update_landing_page` ($7.50/call)

    An alias for `replace_landing_page`, kept temporarily for backwards compatibility. It will be removed in the next release — migrate agents and skills to call `replace_landing_page` (for rewrites) or `patch_landing_page` (for small edits) directly.

  14. 14. List pages with `list_landing_pages` (free)

    Returns all pages for the organization with metadata, lead counts, and the `subdomain` each page is hosted on (so you can see at a glance which brand a page lives under). Pass `subdomain` to filter to a single brand host, or `include_deleted: true` to see soft-deleted pages. Use this to check what's currently deployed before creating new pages or to find page IDs for other operations.

  15. 15. Query leads with `get_landing_page_leads` (free)

    Pass a `page_id` to retrieve collected email leads in reverse chronological order. Supports `limit` (default 100, max 500) and `offset` for pagination. Use this to review lead quality inline or to check submission volume.

  16. 16. Export leads with `export_landing_page_leads` (free)

    Returns a signed CSV download URL that expires in **1 hour**. Pass `page_id` to export leads from a specific page, or omit it to export leads across all pages. Mention the 1-hour expiry to the user.

  17. 17. Delete pages with `delete_landing_page` (free)

    Soft-deletes a page — removes it from public hosting but **preserves all lead data**. Leads remain queryable and exportable after deletion. Use this when a campaign ends or a page needs to be taken down.

  18. 18. Connect a custom domain with `connect_custom_domain` (25¢/call)

    Serve pages from the customer's own domain (e.g. `launch.acme.com`) instead of a `{subdomain}.gentic.run` host. Pass the `domain` and the tool provisions a Let's Encrypt cert via Fly and returns the CNAME record the customer must add at their DNS provider. Once the CNAME propagates (usually a few minutes), call `verify_custom_domain` to finalize. Use `list_custom_domains` (free) at any point to see connected domains and their verification status, and `disconnect_custom_domain` (free) to remove a domain — it tears down the Fly cert and stops serving pages on it.

  19. 19. Lead capture REST endpoint (not an MCP tool)

    Deployed pages can submit leads to `POST /api/leads/:orgSlug/:pageId` with a JSON body containing `email` (required) and optional `name`, `source`, and `metadata` fields. This endpoint is built into the hosting infrastructure — it's not called via MCP but should be referenced when building page HTML with forms.

6. Tool Reference

26 tools, rendered live from the Gentic MCP manifest. Parameter tables come directly from each tool's JSON Schema.

claim_subdomain

Free

Claim an additional subdomain under gentic.run for this organization. Landing pages deployed to the claimed subdomain will serve at {subdomain}.gentic.run. Subdomains are globally unique across all organizations — the call fails with a structured "taken" error if another org already owns it. An org's original slug is auto-claimed as its default subdomain; use this tool when the org runs multiple brands and wants each to have its own subdomain (e.g. a holdco with brands "rhodeandfrond" and "pistash").

ParameterTypeDescription
subdomain
required
string

Subdomain label to claim, e.g. 'pistash' for pistash.gentic.run. Lowercase alphanumeric + hyphens, 3-63 chars, cannot start or end with a hyphen. Reserved words (www, api, app, admin, mail, assets, static, cdn, mcp, auth, docs, blog, dashboard, console) are rejected.

connect_custom_domain

25¢ / call

Connect a customer-owned domain (e.g. acme.com) to serve this org's landing pages. Provisions a Let's Encrypt cert via Fly and returns the CNAME record the customer must add. After the CNAME propagates (usually a few minutes), call verify_custom_domain to finalize.

ParameterTypeDescription
domain
required
string

Fully-qualified domain the customer wants to use, e.g. 'acme.com' or 'www.acme.com'

subdomainstring

gentic.run subdomain whose pages this custom domain should serve, e.g. 'theivoryshell' to serve pages from theivoryshell.gentic.run. Must be claimed by this org (see claim_subdomain). Defaults to the org's default subdomain when omitted — required when pages live on a non-default subdomain.

delete_landing_page

Free

Remove a landing page from public hosting. Lead data is preserved and still queryable.

ParameterTypeDescription
page_id
required
string

Page ID to delete

deploy_landing_page

25¢–$7.50

Deploy a landing page to a live URL at {subdomain}.gentic.run/{page-slug}. Either pass a draft_id from a generate_landing_page job (preferred — 25¢, server promotes the draft to live) OR pass complete html directly (legacy — $7.50). The page is publicly accessible immediately. Subdomain precedence: (1) explicit `subdomain` input when provided, (2) the idea's auto-claimed subdomain when `idea_slug` is provided and the idea has one (see startup_create_idea), (3) the org's default subdomain. Call `claim_subdomain` first for brand hosts you haven't reserved yet. Slug collisions are scoped per subdomain — the same path slug can exist on two different subdomains without conflict. If the slug is already in use on the chosen subdomain, behavior depends on on_conflict — by default the call fails with a structured error payload that includes suggested_slug and existing_page_id so the caller can retry with the suggested slug or switch to replace_landing_page with the existing_page_id.

Pricing: $0.25 when promoting a generate_landing_page draft (draft_id), $7.50 on the legacy raw-html path.

ParameterTypeDescription
slug
required
string

URL path segment (lowercase, alphanumeric + hyphens, 3-64 chars)

title
required
string

Page title for display and metadata

draft_idstring

Draft ID returned by generate_landing_page — server fetches the HTML from S3 and deploys it. Cheapest path (25¢) and the recommended way to publish a generated page. Mutually exclusive with html.

htmlstring

Complete, self-contained HTML document. Legacy path ($7.50) — only use when you don't have a draft_id. Mutually exclusive with draft_id.

descriptionstring

Brief description of the page's purpose

reference_urlstring

Original reference URL used for generation

brand_domainstring

Explicit brand-domain key for canonical brand-guidelines lookup (e.g. 'irestore.com'). Use whenever the user names a brand and `reference_url` is a template / asset URL — without this, the lookup uses `reference_url` as the key and can never match a stored record.

subdomainstring

Subdomain label to host this page under, e.g. 'pistash' for pistash.gentic.run. Must be a subdomain claimed by this org (see `claim_subdomain` / `list_subdomains`). Defaults to the org's default subdomain when omitted.

idea_slugstring

Idea slug to pull brand style guide from. If provided, injects the idea's brand CSS into the page.

ignore_brand_style_guide
required
boolean

Skip injecting the brand style guide CSS into this page (default: false)

default: false

on_conflict
required
string

Behavior when the slug is already taken on the chosen subdomain. 'fail' (default) returns a structured slug_taken error with suggested_slug + existing_page_id so the caller can retry in one call. 'suffix' auto-appends -2, -3, ... until it finds a free slug and deploys under that. Use 'suffix' only when the user didn't name the slug; keep 'fail' when the slug is meaningful.

enum: fail, suffix · default: "fail"

disconnect_custom_domain

Free

Disconnect a custom domain. Removes the Fly-issued cert, deletes the DB mapping, and stops serving landing pages on this domain.

ParameterTypeDescription
domain
required
string

The custom domain to disconnect

edit_landing_page

100¢ / call

Edit a landing page from a freeform brief, e.g. 'add a testimonial section after the hero' or 'remove the pricing block'. Targets either a deployed page (page_id) or an undeployed generation draft (draft_id) — pass exactly one. The server fetches the HTML, asks Gemini to compute minimal-diff string-replacement edits, and applies them. $1.00 — cheaper than replace_landing_page ($7.50, full rewrite via Opus) and more capable than patch_landing_page (FREE, mechanical substitution where the caller already knows the strings). For trivial swaps where you can spell out the exact old/new strings yourself, prefer patch_landing_page. When editing a draft (draft_id), the result is saved as a NEW draft with a fresh draft_id returned in the response — chain these calls to iterate before deploying.

ParameterTypeDescription
page_idstring

Page ID of a deployed landing page. Mutually exclusive with draft_id.

draft_idstring

Draft ID from generate_landing_page or a prior draft-targeted patch/edit. Must be a UUID. Mutually exclusive with page_id. The edited HTML is written to a NEW draft; the response includes the new draft_id.

brief
required
string

Freeform description of the change. Be specific about location and intent — e.g. 'add a 3-card testimonial section after the hero, with names and photo URLs as placeholders'.

expected_content_hashstring

Optional sha256 of the HTML the brief was authored against (from get_landing_page_html). If provided and the stored content has changed, the edit fails without writing.

export_landing_page_leads

Free

Export collected leads as a downloadable CSV file. Returns a signed URL that expires in 1 hour.

ParameterTypeDescription
page_idstring

Specific page ID (if omitted, exports leads from all pages)

extract_brand_guidelines

300¢ / call

Extract comprehensive, production-grade brand guidelines from a brand's public website. Crawls key pages, captures screenshots, and combines HTML/CSS parsing with vision-model analysis to produce a canonical brand document with colors, typography, voice, imagery, aesthetic direction, heritage, and generative guardrails. Every field includes source, confidence, and evidence. Pass webhook_url for async execution.

ParameterTypeDescription
url
required
string

The brand's public website URL. Homepage is always crawled; sub-pages auto-selected from links.

brand_namestring

Optional override. If omitted, extracted from meta tags / <title>.

force_refresh
required
boolean

If true, bypass the 30-day cache and run a fresh extraction. Default false.

default: false

webhook_urlstring

If provided, the tool returns immediately with a job_id and POSTs results here on completion.

depth
required
integer

Max number of pages to crawl. Default 4 (homepage + about + product + collection). Capped at 6.

1 – 6 · default: 4

fetch_rendered_page

10¢ / call

Fetch a web page with full JavaScript rendering and return the rendered HTML source code. Use this to capture the structure and content of a reference landing page for cloning — unlike fetch_page which returns only text, this returns the full rendered DOM.

ParameterTypeDescription
url
required
string

URL to fetch and render

generate_landing_page

750¢ / call

Generate a landing page HTML document via Claude Opus 4.7. Async — returns a job_id and draft_id immediately and runs ~1–5 minutes on a Modal worker. The result lands as an immutable draft in S3; promote to a live URL with deploy_landing_page(draft_id=...) once the job reports complete via list_asset_jobs (filter type='landing_page'). $7.50 for generation, charged only when generation succeeds. When reference_url is set, the server auto-fetches the rendered HTML via ScrapingBee so the model has source to clone — that adds a separate $0.10 surcharge (same price as fetch_rendered_page). Pass base_html instead if you've already fetched the source page yourself.

ParameterTypeDescription
brief
required
string

Freeform description of the page you want — purpose, audience, sections, voice, calls-to-action. The more specific, the better.

idea_slugstring

Idea slug whose saved brand style guide should drive colors, fonts, and tone. Falls back to canonical brand guidelines (when reference_url is set) if the idea has none.

reference_urlstring

Clone target — when set, the server fetches this page and the model reproduces every section in full with brand-substituted copy. Used as a fallback brand-domain key only when `brand_domain` is not supplied AND this URL points at a real brand site (not an asset host like *.s3.amazonaws.com or *.gentic.run). Pass `brand_domain` separately when the clone target is a template / asset URL.

brand_domainstring

Explicit brand-domain key for canonical brand-guidelines lookup (e.g. 'irestore.com' or 'https://irestore.com'). Use whenever the user names a brand — even if `reference_url` is set, since `reference_url` is often a template/asset URL that won't match any stored brand record. Takes precedence over deriving the key from `reference_url`. Normalised the same way as records inserted by `extract_brand_guidelines`.

base_htmlstring

Existing HTML to revise. Pass when you want to iterate on a current page rather than generate from scratch.

style_hintsobject

Free-form overrides on top of the brand guide (tone, density, color overrides, etc.).

webhook_urlstring

Optional callback URL fired when the draft completes (or fails). Receives a JSON payload with job_id, status, draft_id, draft_url (S3), byte_length, stop_reason, prompt, error. Used by gentic-computer to post the completion notice back to the originating Slack / Telegram thread.

get_brand_guidelines

Free

Look up canonical brand guidelines for your organization. Pass `domain` or `url` to fetch a specific record. With no arguments, returns the single brand on file if the org has exactly one; returns a `candidates` list to disambiguate if there are several; returns a friendly not-found message if there are none. All responses use a `{ found: true/false, ... }` envelope. Free.

ParameterTypeDescription
domainstring

Brand domain, e.g. 'beekman1802.com'. Optional — if omitted, the server resolves to the org's single extracted brand (or returns a candidate list to disambiguate).

urlstring

Any URL on the brand's site; domain is normalized from this. Optional — see `domain` for the no-args resolution behavior.

get_landing_page_html

Free

Fetch the current HTML of either a deployed landing page (by page_id) or an undeployed generation draft (by draft_id). Pass exactly one. Pair with patch_landing_page to make small targeted edits — the returned content_hash can be passed back as expected_content_hash for optimistic concurrency. Use the draft_id form to QA a generated page before paying to deploy it.

ParameterTypeDescription
page_idstring

Page ID of a deployed landing page. Mutually exclusive with draft_id.

draft_idstring

Draft ID returned by generate_landing_page (or by a prior draft-targeted patch_landing_page / edit_landing_page call). Must be a UUID. Mutually exclusive with page_id.

get_landing_page_leads

Free

Query collected leads (email submissions) for a specific landing page. Returns results in reverse chronological order with pagination.

ParameterTypeDescription
page_id
required
string

Page ID to query leads for

limitnumber

Max results (default: 100, max: 500)

max 500 · default: 100

offsetnumber

Pagination offset (default: 0)

default: 0

get_landing_page_version

Free

Fetch the HTML for a specific historical version of a landing page. Use list_landing_page_versions to discover version_ids. Pair with restore_landing_page_version to roll back.

ParameterTypeDescription
page_id
required
string

Page ID

version_id
required
string

Version ID returned by list_landing_page_versions (the {ISO8601}-{short_hash} stem)

list_asset_jobs

Free

List recent asset generation jobs (images, videos, and landing pages). Returns job IDs, statuses, prompts, output URLs, and (for landing-page jobs) draft_id + content_hash you can pass to deploy_landing_page. Pass job_id to fetch a single job (useful for polling a specific generation). Use this to check on generation progress.

ParameterTypeDescription
job_idstring

Fetch a specific job by id. Use this when polling a generate_landing_page / generate_ad_asset / generate_video job you just kicked off — returns the same row shape as listing, just filtered to one. Other filters (limit/status/type) are ignored when set.

limit
required
integer

Number of recent jobs to return (1-100, default 20)

1 – 100 · default: 20

statusstring

Filter by job status. Omit to return all statuses.

enum: processing, completed, failed

typestring

Filter by asset type. Omit to return all types.

enum: image, video, video_edit, voice_replace, landing_page

list_custom_domains

Free

List all custom domains connected to this organization along with their verification status and the gentic.run subdomain each one serves from.

This tool takes no parameters.

list_landing_page_versions

Free

List the immutable HTML version history for a deployed landing page. Each entry includes a version_id, created_at timestamp, content hash, byte size, and source ('deploy', 'replace', 'patch', or 'restore'). Pair with get_landing_page_version to inspect historical content or restore_landing_page_version to revert.

ParameterTypeDescription
page_id
required
string

Page ID to list versions for

list_landing_pages

Free

List landing pages for the organization with metadata, lead counts, and the subdomain each page is hosted on. Optional `subdomain` filter restricts results to a single brand host.

ParameterTypeDescription
include_deletedboolean

Include deleted pages (default: false)

default: false

subdomainstring

Filter to pages under a specific claimed subdomain. Omit to list pages across all the org's subdomains.

list_subdomains

Free

List all subdomains claimed by this organization under gentic.run. The "is_default" entry is the org's original slug (auto-claimed) and is used as the default for landing-page deploys when no explicit subdomain is given.

This tool takes no parameters.

patch_landing_page

Free

Apply small, targeted string-replacement edits to a landing page HTML without regenerating it. Targets either a deployed page (page_id) or an undeployed generation draft (draft_id) — pass exactly one. Call get_landing_page_html first to fetch current content. Each edit's old_string must appear exactly once in the HTML (or set replace_all: true) — include enough surrounding context to make it unique. Pass new_string: '' to delete the matched substring. Use this for copy fixes, image src swaps, color tweaks where you can spell out the exact strings yourself. For prose-described changes ('add a testimonial section after the hero'), prefer edit_landing_page. For full rewrites, use replace_landing_page. When patching a draft (draft_id), the result is saved as a NEW draft with a fresh draft_id returned in the response — chain these calls to iterate on a generation before deploying.

ParameterTypeDescription
page_idstring

Page ID of a deployed landing page. Mutually exclusive with draft_id.

draft_idstring

Draft ID from generate_landing_page or a prior draft-targeted patch/edit. Must be a UUID. Mutually exclusive with page_id. The patched HTML is written to a NEW draft; the response includes the new draft_id.

edits
required
object[]

Sequential edits. Each sees the result of prior edits.

expected_content_hashstring

Optional sha256 of the HTML the edits were authored against (from get_landing_page_html). If provided and the stored content has changed, the patch fails without writing. Detects stale reads — not a lock; concurrent patches between the hash check and write are still possible.

release_subdomain

Free

Release a subdomain claim owned by this organization. The org's default subdomain (its original slug) cannot be released. Refuses if any active landing page is still pinned to the subdomain — delete or migrate those pages first.

ParameterTypeDescription
subdomain
required
string

Subdomain label to release, e.g. 'pistash'.

replace_landing_page

25¢–$7.50

Replace an existing landing page's HTML with a full new document and/or update its metadata. Either pass draft_id from a generate_landing_page job (preferred — 25¢) OR pass complete html ($7.50). Use this for layout changes, major restructures, or metadata-only updates (title, description). For small edits (copy fixes, image swaps, color tweaks), prefer patch_landing_page — it is much cheaper and faster because it does not require regenerating the whole page.

Pricing: $0.25 when promoting a draft (draft_id), $7.50 on the legacy raw-html or metadata-only path.

ParameterTypeDescription
page_id
required
string

Page ID to replace

draft_idstring

Draft ID returned by generate_landing_page — server fetches the HTML from S3 and replaces the page with it. Cheapest path (25¢). Mutually exclusive with html.

htmlstring

New full HTML content. Legacy path ($7.50). Mutually exclusive with draft_id. If both html and draft_id are omitted, existing content is unchanged (metadata-only update).

titlestring

New title

descriptionstring

New description

idea_slugstring

Idea slug to pull brand style guide from. If provided, injects the idea's brand CSS into the page.

ignore_brand_style_guide
required
boolean

Skip injecting the brand style guide CSS into this page (default: false)

default: false

restore_landing_page_version

25¢ / call

Roll a landing page back to a previous version's HTML. Discover version_ids via list_landing_page_versions. The restore writes a new immutable version (source='restore') pointing at the historical content, then promotes it to the live URL — the prior version remains in history.

ParameterTypeDescription
page_id
required
string

Page ID to restore

version_id
required
string

Version ID to restore (from list_landing_page_versions)

save_brand_style_guide

Free

Save or update a brand style guide for a specific idea. Sets brand colors, fonts, and tone that are automatically applied to future landing pages. You can set individual fields — any field you omit keeps its current value (if a guide already exists).

ParameterTypeDescription
idea_slug
required
string

The idea this style guide belongs to

primary_colorstring

Primary brand color (hex, e.g. '#2D5A3D')

secondary_colorstring

Secondary brand color (hex)

accent_colorstring

Accent brand color (hex)

primary_color_namestring

Name for the primary color (e.g. 'Forest Green')

secondary_color_namestring

Name for the secondary color

accent_color_namestring

Name for the accent color

heading_fontstring

Font family for headings (e.g. 'DM Serif Display')

body_fontstring

Font family for body text (e.g. 'Inter')

voicestring

Brand voice description (e.g. 'Warm, approachable, and confident')

personality_traitsstring[]

Personality trait keywords (e.g. ['friendly', 'minimal', 'bold'])

visual_moodstring[]

Visual mood keywords (e.g. ['warm', 'organic', 'handcrafted'])

logo_directionstring

Logo direction notes

update_landing_page

25¢–$7.50

[DEPRECATED — use replace_landing_page] Alias for replace_landing_page. For small edits use patch_landing_page; for full rewrites use replace_landing_page. This alias will be removed in the next release.

Pricing: Mirrors replace_landing_page pricing.

ParameterTypeDescription
page_id
required
string

Page ID to replace

draft_idstring

Draft ID returned by generate_landing_page — server fetches the HTML from S3 and replaces the page with it. Cheapest path (25¢). Mutually exclusive with html.

htmlstring

New full HTML content. Legacy path ($7.50). Mutually exclusive with draft_id. If both html and draft_id are omitted, existing content is unchanged (metadata-only update).

titlestring

New title

descriptionstring

New description

idea_slugstring

Idea slug to pull brand style guide from. If provided, injects the idea's brand CSS into the page.

ignore_brand_style_guide
required
boolean

Skip injecting the brand style guide CSS into this page (default: false)

default: false

verify_custom_domain

Free

Check whether a pending custom domain's Fly-issued Let's Encrypt cert has been provisioned. Flips the mapping to 'verified' and starts serving landing pages on the custom domain once ready.

ParameterTypeDescription
domain
required
string

The domain previously registered via connect_custom_domain

7. Pricing

Pricing is pulled live from the Gentic MCP manifest. All prices are per call and deducted from your Gentic credits.

ToolCost
claim_subdomainFree
connect_custom_domain25¢ / call
delete_landing_pageFree
deploy_landing_page25¢–$7.50
disconnect_custom_domainFree
edit_landing_page100¢ / call
export_landing_page_leadsFree
extract_brand_guidelines300¢ / call
fetch_rendered_page10¢ / call
generate_landing_page750¢ / call
get_brand_guidelinesFree
get_landing_page_htmlFree
get_landing_page_leadsFree
get_landing_page_versionFree
list_asset_jobsFree
list_custom_domainsFree
list_landing_page_versionsFree
list_landing_pagesFree
list_subdomainsFree
patch_landing_pageFree
release_subdomainFree
replace_landing_page25¢–$7.50
restore_landing_page_version25¢ / call
save_brand_style_guideFree
update_landing_page25¢–$7.50
verify_custom_domainFree

8. Notes

  • Pages are deployed to `{subdomain}.gentic.run/{page-slug}`. Every org's original slug is auto-claimed as its default subdomain; additional brand subdomains can be reserved with `claim_subdomain`. Deploy precedence when no `subdomain` is passed: explicit input → idea's auto-claimed subdomain (when `idea_slug` is provided) → org default. The `url` and `subdomain` fields on every deploy/list/replace/get response reflect the actual host — never reconstruct URLs from `org_slug + slug`.
  • Slug uniqueness is **scoped per subdomain** — the same path slug (e.g. `/launch`) can exist on two different brand subdomains without collision.
  • **Generate-then-promote is the cheapest path.** `generate_landing_page` ($7.50, async, charged only on success) writes an immutable draft via Claude Opus 4.7 and returns a `draft_id`. Promote with `deploy_landing_page(draft_id=...)` or `replace_landing_page(draft_id=...)` for **25¢**. Pass `html` directly only when you already have hand-written markup (legacy $7.50 path).
  • On the raw-html path, HTML must be **complete and self-contained** — inline all CSS and JS. External resources may break or load slowly. Generated drafts are already self-contained.
  • **Three tiers for editing a live page, by intent and cost.** `patch_landing_page` (50¢) — mechanical string replacement when you already know the exact old/new strings (typos, image swaps, color tweaks). `edit_landing_page` ($1) — describe the change in prose and Gemini computes the minimal diff ("add a testimonial section after the hero", "remove the pricing block"). `replace_landing_page` (25¢ from a draft, $7.50 raw) — layout changes and full rewrites only.
  • Always call `get_landing_page_html` before `patch_landing_page` and pass the returned `content_hash` as `expected_content_hash` to avoid clobbering concurrent edits.
  • **Every change is versioned.** `deploy`, `replace`, `patch`, and `restore` each write an immutable version row (with content hash, byte size, and `source`). Inspect history with `list_landing_page_versions` (free) and `get_landing_page_version` (free); roll back with `restore_landing_page_version` (25¢) — restores themselves are reversible because they create a new version rather than overwriting history.
  • Pass `idea_slug` to `deploy_landing_page` or `replace_landing_page` to auto-inject brand CSS from a style guide saved via `save_brand_style_guide`. Set `ignore_brand_style_guide: true` to opt out.
  • `update_landing_page` is **deprecated** — it's an alias for `replace_landing_page` and will be removed in the next release. Migrate now.
  • Lead capture is built in. The REST endpoint `POST /api/leads/:orgSlug/:pageId` accepts `email` (required), `name`, `source`, and `metadata`.
  • Soft-deleted pages preserve all lead data — leads remain queryable and exportable.
  • Export CSV download links expire in **1 hour**.
  • Slugs must be lowercase, alphanumeric with hyphens, 3–64 characters, and cannot start or end with a hyphen. Subdomain labels follow the same rules with a 63-char max and a reserved-words denylist (`www`, `api`, `app`, `admin`, `mail`, `assets`, `static`, `cdn`, `mcp`, `auth`, `docs`, `blog`, `dashboard`, `console`).
  • Brand subdomains: use `claim_subdomain` to reserve a brand host (free), `list_subdomains` to see what's owned (the `is_default` entry is the auto-claimed org slug and cannot be released), and `release_subdomain` to free a label. `release_subdomain` refuses if any active landing page is still pinned to that subdomain — delete or migrate those pages first.
  • Slug collisions on `deploy_landing_page`: if the user didn't pin a specific slug, pass `on_conflict: "suffix"` so the server auto-picks a free variant (`-2`, `-3`, …) and returns it as `slug_resolution: "suffix"` with the `original_slug`. Otherwise leave `on_conflict` as `"fail"` (default) and, on a `slug_taken` error (payload: `{ error: "slug_taken", suggested_slug, existing_page_id, message }`), either retry `deploy_landing_page` with `suggested_slug` or switch to `replace_landing_page` against `existing_page_id` — whichever matches user intent.
  • Custom domains: after `connect_custom_domain`, the customer must add the returned CNAME record at their DNS provider. Call `verify_custom_domain` once DNS has propagated (usually a few minutes) to flip the mapping to verified and start serving pages on that domain.
  • Brand guidelines: `extract_brand_guidelines` costs **$3/call** and is async — pass `webhook_url` to avoid blocking. The record is keyed by domain and org-scoped; re-reading via `get_brand_guidelines` is always free.
  • All tools are organization-scoped — users only see their own pages, leads, and custom domains.