Getting contacts in
1
Import a CSV
Upload a file of contacts. Map the phone column (required) and any others;
columns you don’t map to a standard field are stored as custom fields.
Optionally drop them onto a list as you import.
2
Via the API or your CRM
POST /v1/contacts upserts by phone — an existing contact is updated in
place, never duplicated — so it doubles as your bulk-import and sync endpoint.
Pass list or list_id to add them to a list in the same call. See
Create or update contacts.3
Automatically
Contacts are also created as people reply to campaigns, and can be tied
to on-site behavior by the web pixel when they identify.
What you can store
- Standard fields — phone, first/last name, timezone.
- Custom fields — anything else you send (plan, state, source, renewal date…).
Unknown fields on import or upsert become custom fields automatically, and
dot-notation nests them. Use them two ways: as personalization tokens
(
{plan}in a message) and as segment conditions. - Tags — lightweight labels you attach to contacts and later segment or filter on.
- Opt-in status & timezone — used for compliance (below).
Lists
A list is a static, hand-built set of contacts — a fixed audience you add people to and that only changes when you edit it.
Add contacts to a list on import, from the contact view, or with
POST /v1/lists/{id}/contacts. Deleting a list never deletes the contacts — only
their membership.
Opt-outs, timezone & compliance
- Opt-outs are automatic. A contact who replies STOP is opted out and never messaged again — you don’t manage this by hand. To keep specific numbers off sends for other reasons, use a suppression list.
- Deleting a contact is not an opt-out. A deleted contact you later re-import can be messaged again; use suppression to stop contact permanently.
- Timezone powers quiet hours — messages respect the recipient’s local 8am–9pm window. Where a contact’s timezone is known (e.g. derived from their area) it’s used; otherwise your workspace default applies.