Internal

Update a dashboard banner (platform admin)

Overwrites an existing banner. contentVersion is recomputed and enabledEpoch bumps only on a false->true transition, so an edit or a re-enable re-shows a dismissed banner while a no-op save does not. Same validation as create; reason is required and audited. expectedUpdatedAt is the revision the operator loaded: the write is rejected 409 when the stored banner changed after that load, so a stale save cannot clobber a concurrent edit.

put/v1/admin/banners/{id}

Path parameters

idstring required

Request body

audience'all' | 'orgs' required
ctaLabelstring
ctaUrlstring

https: or mailto: only; rejected otherwise.

dismissibleboolean required
enabledboolean required
excludePathsstring[]
messagestring required
namestring required
orgIdsstring[]

Required and non-empty when audience is "orgs"; rejected when "all".

pathPrefixesstring[]

Required and non-empty when scope is "paths" (each must start with "/"); rejected when "all".

reasonstring required

Audit reason (recorded in the admin audit log, not on the row).

scope'all' | 'paths' required
tone'info' | 'warn' | 'danger' required
expectedUpdatedAtstring required

The updatedAt the operator loaded; the write is rejected 409 if the stored banner has changed since.

Response

Updated

audience'all' | 'orgs' required

"all" targets every org; "orgs" targets exactly orgIds.

contentVersionstring required
createdAtstring
createdBystring
ctaLabelstring
ctaUrlstring

https: or mailto: only.

dismissibleboolean required
enabledboolean required
enabledEpochinteger required
excludePathsstring[]
idstring required
messagestring required

Rendered as plain text.

namestring required

Operator-facing label; not shown to customers.

orgIdsstring[]
pathPrefixesstring[]
scope'all' | 'paths' required

"all" shows everywhere; "paths" shows only under pathPrefixes.

tone'info' | 'warn' | 'danger' required
updatedAtstring
updatedBystring

Changes

Changed in 1 of the 20 revisions of this API.1