Contacts
Create contact
Create a new contact in a Nedzo workspace via the REST API. Provide a phone number, name, email, tags, and custom field values to add a contact record.
POST
Workspace UUID (required for account API keys, optional for workspace API keys)
First name
Last name
Email address
Phone number (E.164 format)
IANA timezone identifier (e.g.
America/New_York, Europe/Amsterdam). Used by features that respect the contact’s local time, such as workflow scheduling and campaign send windows.- Optional. When omitted, the timezone is auto-derived from the phone number (US area code or country code). If the phone can’t be resolved to a region, the workspace’s default timezone is used as fallback. If neither resolves, the field is left null.
- Caller-supplied values always win — if you pass a value, it’s stored as-is.
- Must be a valid IANA timezone identifier; bogus strings are rejected with
400 Bad Request.
Tag names to attach to the contact. Tags that don’t exist yet in your workspace are auto-created. Tag attachment is additive — this endpoint never removes a tag from a contact.
- Names are matched case-sensitively (
"VIP"and"vip"are different tags), trimmed of leading/trailing whitespace, and must be 1–255 characters. - Pass an empty array (
[]) to no-op (no tags attached, none removed). - Tags in the response are returned in alphabetical order regardless of input order.
Custom field values keyed by the custom variable name as displayed in the dashboard (e.g.
"Lead Source" — including spaces and original casing; not a slug). Unknown keys are rejected with a 400. Define new custom variables on the Contacts page before referencing them via the API.- Accepts
string,number,boolean, ornull. All values are persisted as text and returned as strings regardless of input type (e.g.250→"250"). - Pass
nullto clear a stored value.
This endpoint strictly validates the request body. Unknown top-level fields are rejected with a
400 Bad Request. Custom field values must use the customFields object — they cannot be added as top-level fields.phone and email are unique per workspace among non-deleted contacts. If another active contact in the same workspace already has the same phone or email, the request fails with 409 Conflict and an errors array indicating which field collided. Use POST /contacts/upsert instead if you want create-or-update semantics.409 Conflict
