FlatpageDocs
Sites

Update a site

Replace a site's content with a new version. The link stays the same, so anything already shared (a QR code, an email) shows the update. Same body as publishing; linkName isn't allowed here (rename with PUT /sites/{site}/link-name).

PUT
/sites/{site}
AuthorizationBearer <token>

An API key from Settings in the dashboard (fpk_...), or an OAuth access token from the MCP sign-in.

In: header

Path Parameters

sitestring

The site's id, or its link name (the part before .flatpage.page).

Query Parameters

filename?string

Only needed when the Content-Type doesn't say what the file is (for example application/octet-stream): the extension (.html, .zip, .pdf) decides.

Same as publishing: the raw file with its Content-Type, or JSON with an html field.

htmlstring

The page. A reply pasted from an AI chat is fine: a ```html fence and text around it are stripped.

linkName?string | null

New sites only: the link name. Null or missing picks a random one.

Response Body

curl -X PUT "https://flatpage.app/v1/sites/spring-menu?filename=site.zip" \  -H "Content-Type: application/json" \  -d '{    "html": "<!doctype html><title>Spring menu</title><h1>Spring menu, updated</h1>"  }'
{
  "uploadId": "8d0c6f1e-2b7a-4f0e-b1c4-5e9a7d3c2f10",
  "status": "published",
  "site": {
    "id": "3f5e2a90-6b1d-4c1e-9a43-0d6c2f8e7b21",
    "slug": "spring-menu",
    "title": "Spring menu",
    "kind": "html",
    "status": "active",
    "url": "https://spring-menu.flatpage.page",
    "version": 1,
    "bytes": 48213,
    "updatedAt": "2026-11-02T15:40:00Z",
    "views": 128,
    "passwordProtected": false,
    "noindex": false,
    "share": {
      "title": "string",
      "description": "string",
      "image": "string",
      "imagePending": true,
      "faviconPending": true,
      "preview": {
        "title": "string",
        "description": "string",
        "imageUrl": "string",
        "faviconUrl": "string"
      }
    },
    "notifyUnlock": true,
    "spaMode": "auto",
    "pdfDownload": true,
    "emailGate": {
      "enabled": true,
      "headline": "string",
      "consent": "string"
    },
    "feedbackMode": true,
    "formsEnabled": true,
    "routing": {
      "spaDetected": true,
      "has404": true,
      "redirects": 0,
      "warnings": [
        "string"
      ]
    }
  },
  "warnings": [
    "string"
  ]
}
{
  "uploadId": "8d0c6f1e-2b7a-4f0e-b1c4-5e9a7d3c2f10",
  "status": "published",
  "site": {
    "id": "3f5e2a90-6b1d-4c1e-9a43-0d6c2f8e7b21",
    "slug": "spring-menu",
    "title": "Spring menu",
    "kind": "html",
    "status": "active",
    "url": "https://spring-menu.flatpage.page",
    "version": 1,
    "bytes": 48213,
    "updatedAt": "2026-11-02T15:40:00Z",
    "views": 128,
    "passwordProtected": false,
    "noindex": false,
    "share": {
      "title": "string",
      "description": "string",
      "image": "string",
      "imagePending": true,
      "faviconPending": true,
      "preview": {
        "title": "string",
        "description": "string",
        "imageUrl": "string",
        "faviconUrl": "string"
      }
    },
    "notifyUnlock": true,
    "spaMode": "auto",
    "pdfDownload": true,
    "emailGate": {
      "enabled": true,
      "headline": "string",
      "consent": "string"
    },
    "feedbackMode": true,
    "formsEnabled": true,
    "routing": {
      "spaDetected": true,
      "has404": true,
      "redirects": 0,
      "warnings": [
        "string"
      ]
    }
  },
  "warnings": [
    "string"
  ]
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}
{
  "error": "site not found"
}