← Back to Home

Build with Mondovo

Two ways to drive Mondovo programmatically: connect your AI assistant (included on every plan), or automate headlessly with the REST API (part of the Agency add-on).

Connect your AI assistant

Included on every plan

Add Mondovo as a connector in Claude, ChatGPT, or Claude Desktop and build, find, edit, and publish websites by chatting. You sign in to Mondovo and approve access — no API keys, no configuration files. The connector exposes 18 self-describing tools, so your assistant discovers what it can do on its own.

Connector URL

https://app.mondovo.com/api/mcp/sites

claude.ai

Settings → Connectors → Add custom connector → paste the URL → sign in and approve.

ChatGPT

Settings → Connectors (or Apps) → Add connector → paste the URL → sign in and approve.

Claude Desktop

Settings → Connectors → Add custom connector → paste the URL. Same OAuth sign-in — no key needed.

What your assistant can do (18 tools)
  • create_siteCreate a new site from a structured brief
  • get_siteCheck status and get preview/live URLs
  • list_sitesFind your existing sites
  • refine_siteEdit a site in natural language
  • publish_sitePublish a site to the web
  • add_pageAdd one inner page, generated to match the theme
  • add_pagesAdd up to 10 inner pages in one call
  • get_intake_questionsFetch the brief questions Mondovo asks
  • validate_designValidate an externally-authored design payload
  • create_site_from_designCreate a site from an authored design
  • import_design_variationImport an authored design as a new variation
  • generate_design_variationGenerate an additional design variation
  • list_variationsList a site’s design variations
  • switch_variationSwitch the active design variation
  • list_boardsList design boards
  • pin_design_to_boardPin a design to a board
  • share_boardShare a board with a client
  • upload_assetStore an image or video permanently
  • Your assistant can drive the builder, but it cannot read or export your site’s code — tools return status and links only.
  • All plan allowances apply normally: draft limits, monthly AI edits, and publish billing are the same as in the app.
  • Connections are rate-limited to 30 requests/minute and 300/hour.
  • Disconnect any app at any time from Dashboard → Settings → Connected Apps.

Step-by-step walkthrough with screenshots: mondovo.com/connectors

REST API

Agency add-on

The v1 REST API is for headless automation — scripts, backends, and CI pipelines that create, refine, and publish sites without a human in the chat. It uses static API keys, which are part of the Agency add-on. If you just want an AI assistant to use Mondovo, use the connector above instead — it needs no key.

Authentication

Create a key at Dashboard → Settings → API Keys (organization owners and admins; up to 10 active keys). The full key is shown once. Send it as a Bearer token on every request:

Authorization: Bearer mk_live_...

Keys are organization-scoped with scopes sites:create sites:read sites:refine sites:publish sites:delete by default (sites:refine also covers asset uploads). The add-on is verified on every request — if it lapses, existing keys return 403 addon_required.

Endpoints

POST/api/v1/sitesscope: sites:create

Create a site

Creates a site from a structured brief and starts generation in the background (~60s). Returns 202 immediately — poll the site until status is ready. Pass an idempotency_key so a retried timeout returns the original site instead of creating a duplicate.

curl -X POST https://app.mondovo.com/api/v1/sites \
  -H "Authorization: Bearer mk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Bright Path Physio",
    "business": {
      "industry": "physiotherapy",
      "location": "Austin, TX",
      "description": "Sports injury and rehab clinic."
    },
    "design": { "style": "clean, modern", "color_palette": { "primary": "#0f766e" } },
    "goal": "book an appointment",
    "idempotency_key": "3f9d2c1a-7e54-4b0e-9a1f-2b6c8d0e4f5a"
  }'
HTTP/1.1 202 Accepted
{
  "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f",
  "status": "generating",
  "estimated_seconds": 60,
  "poll_url": "/api/v1/sites/5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f"
}
GET/api/v1/sitesscope: sites:read

List sites

Lists your organization’s sites, most recent first (up to 50).

curl https://app.mondovo.com/api/v1/sites \
  -H "Authorization: Bearer mk_live_..."
HTTP/1.1 200 OK
{
  "sites": [
    {
      "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f",
      "name": "Bright Path Physio",
      "status": "ready",
      "preview_url": "https://app.mondovo.com/preview/abc123",
      "pages": ["/", "/about", "/contact"],
      "created_at": "2026-07-24T10:00:00Z"
    }
  ],
  "total": 1
}
GET/api/v1/sites/{id}scope: sites:read

Get site status

Returns status, generation progress, a shareable preview_url, an editor_url, the live deployment_url once published, and page slugs. Use this to poll while status is generating or publishing.

curl https://app.mondovo.com/api/v1/sites/5f8a1c2e-... \
  -H "Authorization: Bearer mk_live_..."
POST/api/v1/sites/{id}/refinescope: sites:refine

Refine with natural language

Applies an AI edit to one page (page defaults to the homepage). Counts against your monthly AI-edit allowance; if the change can’t be saved, no allowance is consumed.

curl -X POST https://app.mondovo.com/api/v1/sites/5f8a1c2e-.../refine \
  -H "Authorization: Bearer mk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "instruction": "Make the hero headline more confident and add a FAQ section", "page": "/" }'
HTTP/1.1 200 OK
{
  "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f",
  "status": "refined",
  "message": "Site has been refined successfully.",
  "poll_url": "/api/v1/sites/5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f"
}
POST/api/v1/sites/{id}/publishscope: sites:publish

Publish to the web

Deploys the site to https://<subdomain>.mondovo.site (custom domains attach in the dashboard). If the site still carries AI-generated placeholder contact details you’ll get a 422 — fix them via refine, or resend with confirm_contact_info: true. See billing notes for the first-publish 402.

curl -X POST https://app.mondovo.com/api/v1/sites/5f8a1c2e-.../publish \
  -H "Authorization: Bearer mk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "subdomain": "bright-path-physio" }'
HTTP/1.1 200 OK
{
  "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f",
  "status": "published",
  "deployment_url": "https://bright-path-physio.mondovo.site",
  "message": "Site published successfully."
}
POST/api/v1/sites/{id}/assetsscope: assets:write or sites:refine

Store an asset permanently

Pass any HTTPS URL — including an expiring signed URL — and Mondovo downloads the file, stores it permanently on our CDN, adds it to the site’s asset library, and returns a stable URL. Images (JPG/PNG/WebP/GIF, max 20 MB) and video (MP4/WebM/MOV, max 80 MB; optimized for the web after upload).

curl -X POST https://app.mondovo.com/api/v1/sites/5f8a1c2e-.../assets \
  -H "Authorization: Bearer mk_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://example.com/clinic-hero.jpg", "alt_text": "Clinic reception" }'
HTTP/1.1 200 OK
{
  "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f",
  "asset_id": "9c2d4e6f-...",
  "url": "https://site-assets.mondovo.com/sites/5f8a1c2e-.../uploads/aB3xY9....jpg",
  "type": "image",
  "mime_type": "image/jpeg",
  "bytes": 482113,
  "message": "Stored the image permanently. Use the returned url — it will not expire."
}
DELETE/api/v1/sites/{id}scope: sites:delete

Delete a draft site

Soft-deletes a draft site. Published sites can’t be deleted via the API — unpublish first from the dashboard.

curl -X DELETE https://app.mondovo.com/api/v1/sites/5f8a1c2e-... \
  -H "Authorization: Bearer mk_live_..."
HTTP/1.1 200 OK
{ "deleted": true, "site_id": "5f8a1c2e-1234-4b6f-9d3e-0a1b2c3d4e5f" }

Using a key with Claude Desktop (automation)

Agency add-on workspaces can also point MCP clients at the connector with a static key instead of OAuth — useful for shared automation accounts:

{
  "mcpServers": {
    "mondovo": {
      "type": "streamable-http",
      "url": "https://app.mondovo.com/api/mcp/sites",
      "headers": { "Authorization": "Bearer mk_live_..." }
    }
  }
}

Rate limits

  • API keys: 10 requests/minute and 60/hour per key by default.
  • AI-assistant connections: 30 requests/minute and 300/hour per connection.

Every API response includes the current window’s state; a 429 adds Retry-After:

X-RateLimit-Limit: 10
X-RateLimit-Remaining: 7
X-RateLimit-Reset: 1784102460

Errors

Every non-2xx response uses one envelope — a stable error code, a human-readable message, and usually a suggestion phrased so an AI agent can relay the next step:

{
  "error": "addon_required",
  "message": "API keys are part of the Agency add-on on this workspace",
  "suggestion": "To use Mondovo from an AI assistant, connect via the Mondovo connector instead — it is included on every plan and needs no API key. ..."
}
StatusCodeMeaning
401invalid_api_keyMissing or unrecognized key. Send Authorization: Bearer mk_live_...
401key_revoked / key_expiredThe key was revoked or has passed its expiry — create a new one.
403addon_requiredThe workspace no longer has the Agency add-on. Checked on every request, not just at key creation.
403missing_scopeThe key lacks the scope this endpoint needs.
402plan_limit_reachedA plan allowance is used up (draft sites, monthly AI refinements, or published sites). Includes limit_type and upgrade_url.
402billing_confirmation_requiredPublishing this site starts a monthly per-site charge that must be confirmed once in the Mondovo editor. The API cannot approve new recurring billing.
404site_not_foundNo site with that ID in your organization.
409site_busy / generation_conflictGeneration is in progress — poll GET /sites/{id} and retry once idle.
409subdomain_takenChoose a different subdomain.
409duplicate_requestA create with this idempotency_key is still running.
422contact_info_needs_confirmationThe site still carries AI-generated placeholder contact details. Fix them via refine, or resend publish with confirm_contact_info: true.
413file_too_largeAsset over the 20 MB (image) / 80 MB (video) cap.
429rate_limit_exceededToo many requests. Body includes retry_after_seconds; a Retry-After header is also set.
500internal_errorUnexpected failure — safe to retry.

Billing notes

API publishes follow the same per-site pricing as the app: taking a site live adds $20/month to the subscription.

The API cannot consent to new recurring charges. The first publish of a billable site returns a structured 402 billing_confirmation_required (with price_per_site_monthly) — the account owner confirms the charge once by publishing from the Mondovo editor. After that, API publishes of the site go straight through.

Site creation and AI edits draw on your plan’s normal allowances — the API never bypasses them.

OpenAPI specification

The full machine-readable spec (OpenAPI 3.1) — import it into your HTTP client, code generator, or a custom GPT action:

https://app.mondovo.com/api/v1/openapi.json

View the spec →