curl --request POST \
--url https://brew.new/api/v1/emails/{emailId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'{
"emailId": "2SmZOWV3ZQ7W5x6g3m4pA",
"emailVersionId": "8g3m4pA2SmZOWV3ZQ7W5x",
"html": "<!DOCTYPE html><html><body>Welcome to Brew.</body></html>",
"previewImage": "https://storage.example.com/emails/2SmZOWV3ZQ7W5x6g3m4pA.png",
"group": null
}Clone an email design
Creates a NEW design by copying the persisted source snapshot exactly. This is a deterministic database fork: it does not invoke an AI agent, reinterpret markup, re-host assets, or regenerate the preview.
Omit emailVersionId to clone the current latest row, or pass a version id from GET /v1/emails/{emailId}?include=versions to clone that exact historical snapshot. Optional groupId (grp_… or ungrouped) or groupName (resolve-or-create) — not both; omit to inherit the source group. Unknown groupId → 404 EMAIL_GROUP_NOT_FOUND. The clone receives fresh design/version ids and the title you pass (else Copy of …) while JSX, rendered HTML, and the preview image remain identical; rename it any time with PATCH /v1/emails/{emailId} { title }.
curl --request POST \
--url https://brew.new/api/v1/emails/{emailId}/clone \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{}'{
"emailId": "2SmZOWV3ZQ7W5x6g3m4pA",
"emailVersionId": "8g3m4pA2SmZOWV3ZQ7W5x",
"html": "<!DOCTYPE html><html><body>Welcome to Brew.</body></html>",
"previewImage": "https://storage.example.com/emails/2SmZOWV3ZQ7W5x6g3m4pA.png",
"group": null
}Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
Optional idempotency key for safe retries. Reusing the same key with the same request body returns the original response for 24 hours.
1 - 100The brand this request acts on. REQUIRED for organization-scoped credentials (otherwise 400 BRAND_ID_REQUIRED — there is no default brand); list ids with GET /v1/brands. Brand-scoped credentials may omit it, and sending a different brand returns 403 BRAND_SCOPE_MISMATCH. A brand outside your organization returns 404 BRAND_NOT_FOUND.
1 - 64Path Parameters
Design id returned by POST /v1/emails and listed by GET /v1/emails.
1 - 64"2SmZOWV3ZQ7W5x6g3m4pA"
Body
Optional exact source-version pin. Omit the body or send an empty object to clone latest.
Exact source version to clone (from GET /v1/emails/{emailId}?include=versions). Omit to clone the current latest version.
1 - 64Name for the clone. Omit for Copy of <source title>; rename later with PATCH /v1/emails/{emailId} { title } over HTTP, update_email_metadata over MCP.
1 - 200File the design under an existing group (grp_…), or ungrouped. Mutually exclusive with groupName.
1 - 64File the design under a group resolved (or created) by this name. Mutually exclusive with groupId.
1 - 60Response
Exact clone created. The response carries the clone’s new ids plus the unchanged rendered HTML and preview.
Was this page helpful?