---
title: "Update email template"
method: PUT
path: "/email-templates/{id}"
tags: ["Email Templates"]
---

# Update email template

`PUT /email-templates/{id}`

## Request

- Base URL: `https://api.100hires.com/v2`
- URL: `https://api.100hires.com/v2/email-templates/{id}`
- Auth: HTTP bearer

Updates an existing email template. Only provided fields are overwritten; omitted fields keep their current values.

To add placeholders to the body, use the same workflow as for creation:
1. `GET /template-placeholders` — list available placeholders
2. `POST /template-placeholders/prepare` — get HTML tag for the chosen placeholder
3. Insert the tag into the body and `PUT /email-templates/{id}`

## Path parameters

- `id` integer, required

## Request body

- EmailTemplateUpdateRequest
  - `name` string: Template name
  - `subject` string: Email subject line. Plain text. **Placeholders:** literal `{{first_name}}` / `{{job_title}}` tokens are NOT substituted — they will be delivered to the recipient verbatim. To embed a placeholder, call `POST /template-placeholders/prepare` and paste the returned HTML `<tag>…</tag>` string into this field.
  - `body` string: Email body HTML. **Placeholders:** literal `{{first_name}}` tokens are NOT substituted — the recipient will see the raw text. To embed a placeholder, call `POST /template-placeholders/prepare` and insert the returned `<tag contenteditable="false" data-type="…" data-identifier="…">…</tag>` element into the HTML at the position where the value should appear.

## Response `200`

Updated email template

- EmailTemplate
  - `id` integer: Email template ID
  - `name` string: Template name
  - `subject` string: Email subject line as stored. Placeholders, when present, are stored as `<tag>` HTML produced by `POST /template-placeholders/prepare`; they are rendered to real values only at send time, not on read.
  - `body` string: Email body HTML as stored. Placeholders are stored as `<tag>` HTML produced by `POST /template-placeholders/prepare` and rendered at send time. Present only when `view=full` (default); omitted entirely when `view=summary` — template bodies can be tens of KB each.
  - `url_backoffice` string, uri: Absolute backoffice URL to edit this email template in the 100Hires recruiter app. Use to render deep-links in agent UIs.
  - `created_at` integer: Unix timestamp
  - `updated_at` integer: Unix timestamp

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found
- `415`: Content-Type must be application/json
- `429`: Too many requests

---

[API](https://skmtc.dev/100hires/apis/100hires-api.md) · [All operations](https://skmtc.dev/100hires/apis/100hires-api/llms.txt) · [OpenAPI document](https://skmtc.dev/100hires/apis/100hires-api/revisions/e63e2d3115f7?raw)
