Contacts
Contacts represent people in your CRM. They support the broadest Public API v2 surface.Supported actions
| Action | Endpoint |
|---|---|
| Create | POST /api/v2/contact |
| Read | GET /api/v2/contact/{contact_id} |
| Query | POST /api/v2/contact/_query |
| Update | PATCH /api/v2/contact/{contact_id} |
| Archive | DELETE /api/v2/contact/{contact_id} |
| Create or update | POST /api/v2/contact/_assert |
| Relationships | /api/v2/contact/{contact_id}/relationship/{api_name} |
| Emails | /api/v2/contact/{contact_id}/attribute/contact_emails |
| Phone numbers | /api/v2/contact/{contact_id}/attribute/contact_phone_numbers |
Common fields
| Field | Value type | Notes |
|---|---|---|
first_name | string | Writable |
last_name | string | Writable |
display_name | string | Computed/read-only |
primary_email | email | Usually derived from contact emails; useful for matching |
primary_phone_number | phone_number | Usually derived from contact phone numbers |
stage | contact_stage | Patchable; may enforce entrance criteria |
owner_user_id | record_reference | Owner user reference |
created_at, updated_at | timestamp | System fields |
GET /api/v2/_schema/contact for the complete field list in your workspace.
Create-or-update by email
_assert returns 201 with meta.action: "created" when it creates a contact and 200 with meta.action: "updated" when it updates an existing contact.
Relationships
Contacts expose typed relationship routes for accounts and opportunities.Emails and phone numbers
Use sub-resource endpoints for surgical edits to contact emails and phone numbers. This avoids replacing the whole parent record.Common errors
| Error code | Usually means |
|---|---|
ambiguous_match | _assert or related_record_match found more than one contact |
unknown_field | Field is not in contact schema |
field_not_updatable | Request tried to write a computed or system field |
stage_entrance_criteria_not_met | Stage move is blocked |
sub_resource_not_supported | Attribute sub-resource is not contact emails or phone numbers |