Appearance
ts notification
Post and manage the announcements users see in the Portal — a maintenance window, a policy change, a new app going live.
Usage
text
ts notifications
ts notification <id>
ts notification new <title> --description=<text> [--type=banner|toast] [--group=<name> ...]
ts notification set <id> <property> <value> [--group=<name> ...]
ts notification delete <id> [--force]Description
Notifications are global — they belong to the server, not to a workspace, so nothing here takes a workspace argument. ts notifications lists them newest first, up to two hundred, with each one's numeric ID, title, display type, target groups, and creation time. That numeric ID is what the other actions take; only new takes a title.
Unlike apps, channels, and links, a notification is a handful of named fields rather than a configuration document, so it uses real flags. new takes the title as a positional argument and the body through --description, which is required. --type chooses how it appears: banner (the default) pins it to the top of the page, toast shows it once and fades. Anything other than those two values is rejected.
Targeting is by user group. Repeat --group for each group that should see the notification; a group name that does not exist fails the whole command, so check it against ts groups first. A notification with no target groups is shown to everyone — that is the default, and it is what ts notifications reports as (everyone) in the GROUPS column.
set changes one property at a time: title, description, or type. Passing --group alongside replaces the target list wholesale; omitting it leaves the existing targeting untouched. There is no way to widen an already-targeted notification back to everyone from ts — clearing the target list is only possible in the Administration site.
Notification icons are not part of this command. ts cannot upload or clear one, so a notification created here displays without an icon until someone adds it in the Administration site.
delete is a soft delete: the notification stops being served and stops appearing in the listing, but the row is retained and ts has no undo for it. It prompts first unless you pass --force, and where there is no terminal --force is required rather than assumed. Creating, changing, and deleting a notification are all recorded in the audit trail, so ts audit will show who posted what.
Options
| Flag | Description | Default/Values | Notes |
|---|---|---|---|
--description | Body text of the notification. | Any text | Required by new. On set, use set <id> description "<text>" instead. |
--type | How the notification is displayed. | banner (default), toast | new only; on set, use set <id> type toast. |
--group | A user group that should see it. | Group name; repeatable | No --group means everyone. On set, replaces the whole target list. |
--force, -f | Delete without confirming. | Required when there is no terminal. |
Examples
bash
# What is currently posted?
ts notifications
# One notification in full, including its body text
ts notification 17
# Announce a maintenance window to everyone
ts notification new "Maintenance Saturday 02:00-04:00 UTC" \
--description="The server will be unavailable while storage is migrated."
# Tell one group only, as a toast rather than a banner
ts notification new "New CAD build available" \
--description="Acme CAD 2026.2 is published to the Design workspace." \
--type=toast \
--group="Design Team"
# Correct the wording after posting
ts notification set 17 description "Maintenance is postponed to Sunday."
# Retarget: this replaces the group list, it does not add to it
ts notification set 17 title "Maintenance Sunday 02:00-04:00 UTC" \
--group="Design Team" --group="Engineering"
# Full titles and group lists, nothing truncated
ts notifications --csv
# Take it down once the window closes, unattended
ts notification delete 17 --force--group on set is a replace, not an append, and omitting it is not a way to clear targeting — it leaves the existing groups in place. Read the notification back with ts notification <id> after retargeting to confirm who will actually see it.
Output
print writes a short summary followed by the body text:
text
Title: Maintenance Saturday 02:00-04:00 UTC
Type: banner
Groups: (everyone)
Created: 2026-07-29T23:26:48.192Z
The server will be unavailable while storage is migrated.--format=json returns the same fields as structured data, including hasIcon.
Exit Codes
0 on success. -6 when the notification ID does not exist. -5 when the account is not a Server Administrator. -1 when an ID or title is missing, when new is run without --description, when set names a property other than title, description, or type, when --type or a --group name is not recognized by the server, or when you decline the delete prompt.
Related Commands
- ts group — The user groups that
--grouptargets. - ts audit — Who posted, changed, or removed a notification.
- ts workspace — Workspace-scoped content, as opposed to these server-wide announcements.
