Opt-out / Opt-in keywords
The opt command mirrors Settings → OPT Management — the keyword
lists that automatically opt a contact out of (or back into) messaging,
plus the optional auto-response message for each side.
Quick start
splashify opt # full settings (default)
splashify opt out # show just opt_out
splashify opt in # show just opt_in
splashify opt out add STOP UNSUBSCRIBE QUIT # add keywords (case-insensitive dedupe)
splashify opt out remove QUIT # remove keywords
splashify opt out response "You have been opted out of all marketing messages."
splashify opt out response-on # enable the auto-response
splashify opt out response-off # disable the auto-response
splashify opt in add START SUBSCRIBE
splashify opt in remove START
splashify opt in response "Welcome back — you'll start receiving updates again."
splashify opt in response-on | response-offCommand reference
| Subcommand | What it does |
|---|---|
(none — default) / status / show | GET /app/opt-settings — both sides |
out / in | Print only that section |
out add <kw1> [<kw2> ...] | Append keywords to opt_out.keywords; existing entries (case-insensitive) are skipped |
out remove <kw1> [<kw2> ...] | Drop matching keywords (case-insensitive) |
out response "<text>" | Set opt_out.response ("" to clear) |
out response-on / response-off | Toggle opt_out.response_enabled |
in ... | Same actions, applied to opt_in |
Why writes do read-modify-write
PUT /api/v1/app/opt-settings requires both opt_out and opt_in
in the body — sending just one side would clear the other. The CLI
always loads the current settings first, mutates the requested side, and
submits the merged payload. Same pattern as splashify waba update and
splashify attribute update.
Response shape
{
"success": true,
"opt_out": {
"keywords": ["STOP", "UNSUBSCRIBE"],
"response": "You have been opted out.",
"response_enabled": true
},
"opt_in": {
"keywords": ["START", "SUBSCRIBE"],
"response": "Welcome back.",
"response_enabled": false
}
}Common patterns
# Just the opt-out keywords
splashify opt | jq -r '.opt_out.keywords[]'
# Quick check: is auto-response enabled on either side?
splashify opt | jq '{out: .opt_out.response_enabled, in: .opt_in.response_enabled}'
# Migrate keywords from one side to the other (out → in)
splashify opt | jq -r '.opt_out.keywords[]' | \
xargs -r splashify opt in addRelated
- Contacts —
contact update <id> --opted-out true|falsemanually opts a contact in or out - Broadcasts — opted-out contacts are auto-excluded from sends