Updates the teaser for a project (PATCH — only specified fields are changed).
Send If-Match with the ETag from the most recent GET. The
server returns 412 Precondition Failed if the teaser has been
modified by another writer since.
Only fields explicitly present in the body are modified — every
other field is preserved exactly. To clear a nullable field, send
it as JSON null. Rejected with HTTP 409 when the project
has been published; unpublish via the UI first.
Free-plan clamp
Free-plan callers receive a clamped result: the server silently
downgrades any plan-restricted options. The response body reflects
the actually persisted state so callers can detect the clamp.
Path Parameters
id
Type: string
required
Project ID
Headers
If-Match
Type: string
ETag for optimistic concurrency
Body·
required
Fields to update
Request body for PATCH on the V1 teaser routes
(PATCH /api/v1/projects/{id}/teaser,
PATCH /api/v1/properties/{id}/teaser,
PATCH /api/v1/projects/{id}/rooms/{roomId}/teaser).
Each property is independently optional — present means "write this",
absent means "no change".
options
Type: object · nullable
Sparse partial update of the per-field display map. Each property is
independently optional — present means "write this display", absent means
"no change to this field's display".
tags
Type: array string[] | null
Tag snapshot for the teaser. Three forms: omitted = no change;
a list = write this exact snapshot (subset of template.tags);
null = reset to the property's current template pool,
snapshotted server-side at write time.
Responses
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
Request Example for patch/api/v1/projects/{id}/teaser