Attributes
The attribute / attributes commands mirror Settings → Attributes
— custom columns added to each contact (Company, Job Title, Birthday,
etc.). Full CRUD plus the page's visibility toggle and up/down reorder
actions.
Quick start
bash
splashify attributes # list every attribute
splashify attributes --search co # client-side substring filter on label
splashify attribute <id> # show one (list-and-filter)
splashify attribute create --label "Company" --type TEXT
splashify attribute update <id> --label "Company Name"
splashify attribute toggle-visibility <id>
splashify attribute reorder <id> up | down
splashify attribute delete <id>Command reference
Write examples
bash
# Create a text attribute
splashify attribute create --label "Company" --type TEXT
# Create a required dropdown with options
splashify attribute create \
--label "Lead Source" \
--type SELECT \
--options "Web,Referral,Ads,Trade Show" \
--required true \
--help "Where this lead came from"
# Multi-select
splashify attribute create --label "Interests" --type MULTISELECT \
--options "Sales,Marketing,Support"
# Update — only flags you pass are changed (read-modify-write under the hood)
splashify attribute update <id> --label "Company Name"
splashify attribute update <id> --required false --help "Optional from now on"
splashify attribute update <id> --options "Web,Referral,Ads,Trade Show,Other"Endpoint reference
Attribute types
Why update is read-modify-write
The backend's PUT /api/v1/app/attributes/:id requires label + type
to be present and writes every optional column (is_visible,
is_required, options, default_value, help_text) on every call.
The CLI loads the current row first, overlays only the flags you
passed, then submits the full body so omitted fields stay intact. Same
pattern as splashify waba update and splashify opt ….
Common patterns
bash
# IDs of all required attributes
splashify attributes | jq -r '.attributes[] | select(.is_required) | .id'
# Look up an attribute id by label
splashify attributes | \
jq -r '.attributes[] | select(.label == "Company") | .attribute_id'
# Hide every SELECT attribute from the contacts table
splashify attributes | \
jq -r '.attributes[] | select(.type == "SELECT" and .is_visible) | .attribute_id' | \
xargs -I{} splashify attribute toggle-visibility {}
# Bulk delete attributes whose label starts with "test_"
splashify attributes | \
jq -r '.attributes[] | select(.label | startswith("test_")) | .attribute_id' | \
xargs -I{} splashify attribute delete {}