Contacts
contacts (plural — for listing) and contact (singular — for per-id
actions) mirror the /contacts page. Full CRUD plus the page’s tag,
block, and unblock actions.
Backed by /api/v1/app/contacts/*. Filters that are server-side run on
the backend; everything else (substring search, multi-tag filter) is
applied client-side, same as the page.
Quick start
splashify contacts # first page
splashify contacts --search john --tag vip # filter
splashify contact <id> # detail
splashify contact create --phone +919876543210 --name "Alice"
splashify contact update <id> --notes "VIP. Prefers WhatsApp."
splashify contact tag <id> --tags vip,lead # add tags
splashify contact untag <id> --tags lead # remove tags
splashify contact block <id> # stop sending
splashify contact unblock <id>
splashify contact delete <id>Command reference
splashify contacts — list
splashify contacts
splashify contacts --search john # name / phone substring
splashify contacts --tag vip # filter by tag
splashify contacts --page 2 --limit 100 # paginate| Backed by | GET /api/v1/app/contacts[?page=…&limit=…&search=…] |
|---|
splashify contact <id> — show one
splashify contact 5e9c1a40-... # full detail| Backed by | GET /api/v1/app/contacts/:id |
|---|
splashify contact create — add a contact
splashify contact create \
--phone +919876543210 \
--name "Alice Smith" \
--email alice@example.com \
--tags vip,lead \
--data '{"company":"Acme","interests":["Sales"]}'| Backed by | POST /api/v1/app/contacts |
|---|
--phone is the only required flag. --tags is comma-separated. --data
is merged into the body verbatim and supports any custom attribute
defined in Attributes.
splashify contact update <id> — sparse PUT
The CLI does a read-modify-write under the hood so you only pass the fields you’re changing — the rest stay intact.
splashify contact update <id> --name "Alice S."
splashify contact update <id> --email alice@new.com
splashify contact update <id> --notes "VIP. Prefers WhatsApp over email."
splashify contact update <id> --website https://alice.dev
splashify contact update <id> --opted-out true
splashify contact update <id> --tags vip,lead # replaces the tag set
splashify contact update <id> --data '{"company":"Acme Inc."}'| Backed by | PUT /api/v1/app/contacts/:id |
|---|
splashify contact tag / untag — manage tags
splashify contact tag <id> --tags vip,lead # add
splashify contact untag <id> --tags lead # remove (alias: remove-tags)tag adds the listed tags to the contact (no-op on duplicates). untag
removes only the listed tags, leaving the rest. To replace the entire
tag set in one call, use contact update <id> --tags … instead.
splashify contact block / unblock — stop sending
splashify contact block <id>
splashify contact unblock <id>| Backed by | POST /api/v1/app/contacts/:id/block (and /unblock) |
|---|
Blocked contacts are excluded from every broadcast and template send.
splashify contact delete <id> — remove
splashify contact delete <id> # aliases: rm | remove| Backed by | DELETE /api/v1/app/contacts/:id |
|---|
Deletes the contact row entirely. Tags applied via the tag library are preserved; only this contact’s mapping is removed.
Common patterns
# Bulk-export every contact (paginate yourself)
for p in $(seq 1 10); do
splashify contacts --page $p --limit 100 | jq -c '.contacts[]'
done > all-contacts.jsonl
# Find a contact id by exact phone
splashify contacts --search "+919876543210" | \
jq -r '.contacts[] | select(.phone == "+919876543210") | .id'
# Add the "imported" tag to every contact in segment <seg_id>
splashify segment <seg_id> contacts --limit 500 | \
jq -r '.contacts[].id' | \
xargs -I{} splashify contact tag {} --tags imported
# Opt every blocked contact out of marketing too
splashify contacts | \
jq -r '.contacts[] | select(.is_blocked) | .id' | \
xargs -I{} splashify contact update {} --opted-out trueRelated
- Tags — manage the tag library used by
--tagsandtag - Segments — saved filters over the contact list
- Attributes — custom columns surfaced in
--data