Update Contact
curl --request PATCH \
--url https://qwoty.app/api/contacts/{id} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": {},
"role": [
{}
],
"id_crm": {},
"id_erp": {},
"id_accounting": {}
}
'import requests
url = "https://qwoty.app/api/contacts/{id}"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": {},
"role": [{}],
"id_crm": {},
"id_erp": {},
"id_accounting": {}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
phone: {},
role: [{}],
id_crm: {},
id_erp: {},
id_accounting: {}
})
};
fetch('https://qwoty.app/api/contacts/{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://qwoty.app/api/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'phone' => [
],
'role' => [
[
]
],
'id_crm' => [
],
'id_erp' => [
],
'id_accounting' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://qwoty.app/api/contacts/{id}"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<authorization>")
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.patch("https://qwoty.app/api/contacts/{id}")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "660e8400-e29b-41d4-a716-446655440001",
"customer_id": "550e8400-e29b-41d4-a716-446655440000",
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean.dupont@acme.com",
"phone": "+33 6 99 88 77 66",
"role": ["buyer", "billing"],
"id_crm": null,
"id_erp": null,
"id_accounting": null,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-03-24T14:00:00Z"
}
}
{
"success": false,
"error": "Contact not found"
}
Contacts
Update Contact
Partially update a contact
PATCH
/
api
/
contacts
/
{id}
Update Contact
curl --request PATCH \
--url https://qwoty.app/api/contacts/{id} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: application/json' \
--data '
{
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": {},
"role": [
{}
],
"id_crm": {},
"id_erp": {},
"id_accounting": {}
}
'import requests
url = "https://qwoty.app/api/contacts/{id}"
payload = {
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"phone": {},
"role": [{}],
"id_crm": {},
"id_erp": {},
"id_accounting": {}
}
headers = {
"Authorization": "<authorization>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: '<authorization>', 'Content-Type': 'application/json'},
body: JSON.stringify({
first_name: '<string>',
last_name: '<string>',
email: '<string>',
phone: {},
role: [{}],
id_crm: {},
id_erp: {},
id_accounting: {}
})
};
fetch('https://qwoty.app/api/contacts/{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://qwoty.app/api/contacts/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'first_name' => '<string>',
'last_name' => '<string>',
'email' => '<string>',
'phone' => [
],
'role' => [
[
]
],
'id_crm' => [
],
'id_erp' => [
],
'id_accounting' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"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://qwoty.app/api/contacts/{id}"
payload := strings.NewReader("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "<authorization>")
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.patch("https://qwoty.app/api/contacts/{id}")
.header("Authorization", "<authorization>")
.header("Content-Type", "application/json")
.body("{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://qwoty.app/api/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"email\": \"<string>\",\n \"phone\": {},\n \"role\": [\n {}\n ],\n \"id_crm\": {},\n \"id_erp\": {},\n \"id_accounting\": {}\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"id": "660e8400-e29b-41d4-a716-446655440001",
"customer_id": "550e8400-e29b-41d4-a716-446655440000",
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean.dupont@acme.com",
"phone": "+33 6 99 88 77 66",
"role": ["buyer", "billing"],
"id_crm": null,
"id_erp": null,
"id_accounting": null,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-03-24T14:00:00Z"
}
}
{
"success": false,
"error": "Contact not found"
}
Authorization
string
required
Bearer token. Format:
Bearer qwoty_your_tokenPath Parameters
string
required
UUID of the contact to update
Request Body
All fields are optional. Only the fields provided will be updated.string
Contact’s first name
string
Contact’s last name
string
Email address
string | null
Phone number. Set to
null to unset.array
Assigned roles. Allowed values:
"buyer", "signer", "billing",
"shipping", "legal", "admin"string | null
External CRM ID
string | null
External ERP ID
string | null
External accounting ID
customer_id cannot be changed after creation.Examples
curl -X PATCH https://qwoty.app/api/contacts/660e8400-e29b-41d4-a716-446655440001 \
-H "Authorization: Bearer qwoty_your_token" \
-H "Content-Type: application/json" \
-d '{
"phone": "+33 6 99 88 77 66",
"role": ["buyer", "billing"]
}'
const contactId = '660e8400-e29b-41d4-a716-446655440001'
const response = await fetch(`https://qwoty.app/api/contacts/${contactId}`, {
method: 'PATCH',
headers: {
Authorization: 'Bearer qwoty_your_token',
'Content-Type': 'application/json',
},
body: JSON.stringify({
phone: '+33 6 99 88 77 66',
role: ['buyer', 'billing'],
}),
})
const data = await response.json()
import requests
contact_id = '660e8400-e29b-41d4-a716-446655440001'
response = requests.patch(
f'https://qwoty.app/api/contacts/{contact_id}',
headers={
'Authorization': 'Bearer qwoty_your_token',
'Content-Type': 'application/json',
},
json={'phone': '+33 6 99 88 77 66', 'role': ['buyer', 'billing']},
)
data = response.json()
Response
boolean
true if the update succeededobject
The updated contact object (same shape as Get
Contact)
{
"success": true,
"data": {
"id": "660e8400-e29b-41d4-a716-446655440001",
"customer_id": "550e8400-e29b-41d4-a716-446655440000",
"first_name": "Jean",
"last_name": "Dupont",
"email": "jean.dupont@acme.com",
"phone": "+33 6 99 88 77 66",
"role": ["buyer", "billing"],
"id_crm": null,
"id_erp": null,
"id_accounting": null,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-03-24T14:00:00Z"
}
}
{
"success": false,
"error": "Contact not found"
}
Was this page helpful?
⌘I

