Update person
curl --request PUT \
--url https://api.withallo.com/v2/api/crm/people/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"job_title": "CTO"
}
'import requests
url = "https://api.withallo.com/v2/api/crm/people/{id}"
payload = { "job_title": "CTO" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({job_title: 'CTO'})
};
fetch('https://api.withallo.com/v2/api/crm/people/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.withallo.com/v2/api/crm/people/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'job_title' => 'CTO'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.withallo.com/v2/api/crm/people/{id}"
payload := strings.NewReader("{\n \"job_title\": \"CTO\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.withallo.com/v2/api/crm/people/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"job_title\": \"CTO\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/people/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_title\": \"CTO\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "per-abc123",
"name": "John",
"last_name": "Doe",
"job_title": "CEO",
"website": "https://example.com",
"address": "123 Main St",
"numbers": [
"+33612345678"
],
"emails": [
"[email protected]"
],
"company": {
"id": "com-xyz789",
"name": "Acme Corp"
},
"interactions": 5,
"last_activity_at": "2026-04-28T10:30:00",
"created_at": "2026-04-01T09:00:00",
"updated_at": "2026-04-28T10:30:00"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}People
Update person
Updates an existing person. Only provided fields will be updated.
PUT
/
v2
/
api
/
crm
/
people
/
{id}
Update person
curl --request PUT \
--url https://api.withallo.com/v2/api/crm/people/{id} \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"job_title": "CTO"
}
'import requests
url = "https://api.withallo.com/v2/api/crm/people/{id}"
payload = { "job_title": "CTO" }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({job_title: 'CTO'})
};
fetch('https://api.withallo.com/v2/api/crm/people/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.withallo.com/v2/api/crm/people/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'job_title' => 'CTO'
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.withallo.com/v2/api/crm/people/{id}"
payload := strings.NewReader("{\n \"job_title\": \"CTO\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.withallo.com/v2/api/crm/people/{id}")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"job_title\": \"CTO\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.withallo.com/v2/api/crm/people/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"job_title\": \"CTO\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "per-abc123",
"name": "John",
"last_name": "Doe",
"job_title": "CEO",
"website": "https://example.com",
"address": "123 Main St",
"numbers": [
"+33612345678"
],
"emails": [
"[email protected]"
],
"company": {
"id": "com-xyz789",
"name": "Acme Corp"
},
"interactions": 5,
"last_activity_at": "2026-04-28T10:30:00",
"created_at": "2026-04-01T09:00:00",
"updated_at": "2026-04-28T10:30:00"
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}{
"error": {
"type": "<string>",
"code": "<string>",
"message": "<string>",
"retryable": true,
"request_id": "<string>",
"retry_after_seconds": 123
}
}Required scope:
CRM_WRITEPartial update
This endpoint performs a partial update — only the fields you include in the request body are modified. Omitted fields are left unchanged. All fields from the create endpoint are accepted and optional.Unlinking a company
Sendcompany_id as an empty string ("") to remove the person’s association with their current company.Authorizations
Path Parameters
Person ID (e.g., "per-abc123")
Example:
"per-abc123"
Body
application/json
Request body for updating a person. Only provided fields will be updated.
First name
Last name
Job title
Website URL
Postal address
Phone numbers (replaces all existing numbers)
Email addresses (replaces all existing emails)
ID of the company to associate with
Response
Person updated
A person in the CRM
Show child attributes
Show child attributes
Was this page helpful?
⌘I