---
title: "Set a site’s title, description, social image, favicon or crawler policy"
method: PATCH
path: "/api/v1/sites/{id}/settings"
tags: ["Settings"]
---

# Set a site’s title, description, social image, favicon or crawler policy

`PATCH /api/v1/sites/{id}/settings`

## Request

- Base URL: `https://app.mondovo.com`
- URL: `https://app.mondovo.com/api/v1/sites/{id}/settings`
- Auth: HTTP bearer

Partial update: only the fields you send change, and `null` clears one. A `favicon_url` is downloaded and stored permanently on Mondovo’s CDN, so a temporary or third-party link is fine. Crawler fields are per-crawler and independent — sending one leaves the others as they were. These are publish INPUTS: nothing reaches visitors until `POST /api/v1/sites/{id}/publish`. Requires scope `sites:refine`.

## Request body

- UpdateSiteSettingsInput: Partial. Send only what should change; `null` clears a field. At least one field required.
  - `title` string, nullable
  - `description` string, nullable
  - `og_image_url` string, uri, nullable
  - `favicon_url` string, uri, nullable: PNG, SVG, ICO, JPEG, WebP or GIF, under 500 KB, square (32x32 or 64x64 ideal). Downloaded and stored permanently on Mondovo’s CDN.
  - `ai_crawlers` object: Per-crawler booleans. true allows, false blocks. Omit a crawler to leave its current setting alone.
  - `search_crawlers` object: Per-crawler booleans. true allows, false blocks. Omit a crawler to leave its current setting alone.
  - `llms_txt` string, nullable
  - `robots_txt_rules` object[], nullable: Replaces any existing custom rule set. `null` clears it.
    - `user_agent` string, required
    - `allow` string[]
    - `disallow` string[]
  - `robots_txt_custom` string, nullable
  - `schema_enabled` boolean
  - `schema_business_type` string, nullable
  - `schema_price_range` string, nullable
  - `schema_description` string, nullable

## Response `200`

Updated. `updated` lists the fields that changed; `published` is always false.

- SiteSettings: Every site-level setting that is not code. Written into each published page’s head, or served as /robots.txt and /llms.txt.
  - `site_id` string, uuid
  - `title` string, nullable: Default browser-tab title and search headline.
  - `description` string, nullable: Default meta description.
  - `og_image_url` string, uri, nullable: Social sharing (Open Graph) image.
  - `favicon_url` string, uri, nullable: Browser-tab icon, resolved — what a publish would ship.
  - `ai_crawlers` object: Per-crawler booleans. true allows, false blocks. Omit a crawler to leave its current setting alone.
  - `search_crawlers` object: Per-crawler booleans. true allows, false blocks. Omit a crawler to leave its current setting alone.
  - `llms_txt` string, nullable: Markdown served at /llms.txt.
  - `robots_txt_rules` object[]
    - `user_agent` string
    - `allow` string[]
    - `disallow` string[]
  - `robots_txt_custom` string, nullable: Raw directives appended to robots.txt.
  - `schema_enabled` boolean: Whether Schema.org JSON-LD is injected into published pages.
  - `schema_business_type` string, nullable: Override for the auto-detected Schema.org type.
  - `schema_price_range` string, nullable: "$" to "$$$$".
  - `schema_description` string, nullable: Structured-data-only business description.
  - `updated` string[]: PATCH only — the fields that changed.
  - `published` boolean: PATCH only — always false; publish separately.
  - `message` string

## Other responses

- `400`: Error codes: `invalid_json`, `validation_error`, `invalid_input`, `invalid_url` (blocked host), `fetch_failed` (favicon source unreachable), `unsupported_type` (favicon not an image).
- `401`: Authentication failed. Error codes: `invalid_api_key` (missing/unknown key), `key_revoked`, `key_expired`.
- `403`: Authenticated but not allowed. Error codes: `addon_required` (the API key’s workspace no longer has the Agency add-on — checked on every request, not just at key creation) and `missing_scope` (the key lacks the scope this endpoint needs).
- `404`: `site_not_found`.
- `413`: `too_large` — the favicon exceeds 500 KB.
- `429`: Rate limit exceeded (`rate_limit_exceeded`). The body includes `retry_after_seconds`, `limit`, and `window` ("minute" or "hour"); a `Retry-After` header is also set.
- `502`: `storage_failed` — the favicon could not be stored.

---

[API](https://skmtc.dev/mondovo/apis/mondovo-public-api.md) · [All operations](https://skmtc.dev/mondovo/apis/mondovo-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/mondovo/apis/mondovo-public-api/revisions/1baa3e2865ba?raw)
