## Update an invitation template

**put** `/v1/invitation_templates/{invt}`

Replaces a template: a full replacement, never a patch, under the
`If-Match` contract: missing → `428`, stale → `412` naming the current
version. The logo is three-valued: an absent
`logo` part KEEPS the stored logo, a present one replaces it, and
`remove_logo=true` clears it. A change that flips the template between
with-logo and without is re-checked against your brand's approval and
refused `403 invitation_card_not_granted` at the edit rather than
discovered at the next send. Size refusals match the create:
`422 logo_too_large` for the logo, `413 too_large` past the whole-body
ceiling.

### Path Parameters

- `invt: string`

### Header Parameters

- `"If-Match": string`

### Returns

- `id: string`

  The template id (`invt_…`); what a send's `template_id` references.

- `created_at: string`

- `has_logo: boolean`

  Whether a logo is stored. A template with a logo renders the image card; one without renders the plain card.

- `name: string`

  The brand name printed on the invitation card.

- `updated_at: string`

- `version: number`

  Edit counter that only ever counts up, also returned as this resource's
  strong `ETag`. Echo it in `If-Match` on the next `PUT`; a stale one is
  refused `412` rather than overwriting someone else's edit.

### Example

```http
curl https://messages.api.linqapp.com/v1/invitation_templates/$INVT \
    -X PUT \
    -H 'Content-Type: multipart/form-data' \
    -H "Authorization: Bearer $LINQ_AMB_API_KEY" \
    -F name=name
```

#### Response

```json
{
  "id": "invt_a4f2c718d0",
  "name": "Acme Rides Support",
  "has_logo": true,
  "version": 4,
  "created_at": "2026-08-10T09:00:00Z",
  "updated_at": "2026-08-12T16:00:00Z"
}
```
