Skip to main content
Update an existing contact by id.

Endpoint

PUT /api/v1/{subdomain}/contacts/{id}
Required ability: contacts.update.

Headers

HeaderValue
AuthorizationBearer apitk_...
Content-Typeapplication/json
Acceptapplication/json

Path parameters

subdomain
string
required
Your workspace subdomain.
id
integer
required
Contact id.

Body parameters

firstname
string
required
First name. Max 255 characters.
lastname
string
required
Last name. Max 255 characters. Required on update.
phone
string
required
Phone number. Max 20 characters. Unique per workspace.
type
string
required
lead or customer.
email
string
Max 191 characters. Unique per workspace when provided.
source_id
integer
Id of a Source. Nullable on update.
status_id
integer
Id of a Status. Nullable, max 50.
company
string
Max 255 characters.
description
string
Freeform description.
country_id
integer
Country id.
assigned_id
integer
Owner user id.
groups
string
Comma-separated group names. Missing groups are auto-created.

Example request

curl -X PUT https://dash.xobito.com/api/v1/acme/contacts/451 \
  -H "Authorization: Bearer apitk_your_token_here" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "firstname": "John",
    "lastname": "Doe",
    "phone": "+14155551234",
    "type": "customer",
    "status_id": 3
  }'

Example response

200 OK
{
  "status": "success",
  "message": "Contact updated successfully",
  "data": {
    "id": 451,
    "tenant_id": 13,
    "firstname": "John",
    "lastname": "Doe",
    "phone": "+14155551234",
    "email": "john@example.com",
    "type": "customer",
    "source_id": 2,
    "status_id": 3,
    "updated_at": "2026-04-16T13:01:10.000000Z"
  }
}

Error responses

StatusWhenExample body
401Missing / invalid token{"status":"error","message":"Invalid API token"}
403Missing ability{"status":"error","message":"Token does not have the required ability: contacts.update"}
404Contact not found{"status":"error","message":"Contact not found"}
422Validation{"status":"error","message":"Validation failed","errors":{"lastname":["The lastname field is required."]}}
429Rate limit{"message":"Too many requests","retry_after":45}
500Server error{"status":"error","message":"Failed to update contact"}