Skip to Content

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 byGET /api/v1/app/contacts[?page=…&limit=…&search=…]

splashify contact <id> — show one

splashify contact 5e9c1a40-... # full detail
Backed byGET /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 byPOST /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 byPUT /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 byPOST /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 byDELETE /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 true
  • Tags — manage the tag library used by --tags and tag
  • Segments — saved filters over the contact list
  • Attributes — custom columns surfaced in --data