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
bash
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
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
json
{
"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
bash
# 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