Atualizar contato
Envie apenas os campos que você quer alterar. Trocar o número por um que já pertence a outro contato da empresa responde 409 (ERR_DUPLICATED_CONTACT).
curl --request PUT \
--url https://api.connectadesk.com/api/v1/contacts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"origin": "Site",
"cpfcnpj": "12345678909",
"instagramUsername": "marina.alves",
"customFields": [
{
"id": "plano",
"value": "Ouro"
}
],
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987"
}
'import requests
url = "https://api.connectadesk.com/api/v1/contacts/{id}"
payload = {
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"origin": "Site",
"cpfcnpj": "12345678909",
"instagramUsername": "marina.alves",
"customFields": [
{
"id": "plano",
"value": "Ouro"
}
],
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Marina Alves',
number: '5511999999999',
email: 'marina@exemplo.com.br',
code: 'CLI-8842',
origin: 'Site',
cpfcnpj: '12345678909',
instagramUsername: 'marina.alves',
customFields: [{id: 'plano', value: 'Ouro'}],
sourceUrl: 'https://loja.exemplo.com.br/promo',
sourceId: '23851234567890123',
headline: 'Coleção de inverno',
utmSource: 'instagram',
utmMedium: 'cpc',
utmCampaign: 'inverno-2026',
utmId: '6543210987'
})
};
fetch('https://api.connectadesk.com/api/v1/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://api.connectadesk.com/api/v1/contacts/{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([
'name' => 'Marina Alves',
'number' => '5511999999999',
'email' => 'marina@exemplo.com.br',
'code' => 'CLI-8842',
'origin' => 'Site',
'cpfcnpj' => '12345678909',
'instagramUsername' => 'marina.alves',
'customFields' => [
[
'id' => 'plano',
'value' => 'Ouro'
]
],
'sourceUrl' => 'https://loja.exemplo.com.br/promo',
'sourceId' => '23851234567890123',
'headline' => 'Coleção de inverno',
'utmSource' => 'instagram',
'utmMedium' => 'cpc',
'utmCampaign' => 'inverno-2026',
'utmId' => '6543210987'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.connectadesk.com/api/v1/contacts/{id}"
payload := strings.NewReader("{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.connectadesk.com/api/v1/contacts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 842,
"name": "Maria Silva",
"number": "5511987654321",
"numberCountry": "BR",
"email": "maria.silva@exemplo.com.br",
"code": "CLI-00842",
"cpfCnpj": "12345678909",
"origin": "site",
"profilePicUrl": "https://cdn.exemplo.com/avatars/842.jpg",
"isGroup": false,
"instagramUsername": "maria.silva",
"lid": null,
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"mediaType": "image",
"mediaUrl": "https://cdn.exemplo.com/anuncios/inverno.jpg",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987",
"fbclid": "IwAR0xYzAbC123",
"gclid": null,
"ctwaClid": null,
"tags": [
{
"id": 3,
"name": "Cliente VIP",
"color": "#6941C6"
}
],
"customFields": [
{
"key": "plano",
"value": "Ouro",
"customFieldId": 91,
"name": "Plano",
"type": "select"
}
],
"lastChannel": {
"id": 11,
"name": "Instagram Loja",
"type": "instagram"
},
"createdAt": "2026-07-14T13:22:05.412Z",
"updatedAt": "2026-08-18T09:41:17.883Z"
}
}{
"error": {
"code": "ERR_API_NOT_FOUND",
"message": "Registro não encontrado."
}
}{
"error": {
"code": "ERR_API_IDEMPOTENCY_KEY_REUSED",
"message": "Idempotency-Key já usada com um corpo diferente."
}
}{
"error": {
"code": "ERR_API_VALIDATION",
"message": "O parâmetro `application` é obrigatório e aceita \"contact\" ou \"card\"."
}
}Autorizações
Token da API no formato sk_live_….
Parâmetros de caminho
Corpo
Campos que podem ser gravados em um contato. A foto (profilePicUrl) não pode ser alterada por aqui, porque vem do provedor (WhatsApp/Instagram) e é atualizada por ele. Ela continua sendo devolvida na leitura.
Nome do contato, como aparece na lista e no atendimento.
"Marina Alves"
Telefone com DDI e DDD. Pode vir formatado, como +55 (11) 99999-9999, e só os dígitos são gravados. O país do contato (numberCountry) é deduzido do DDI, e um número sem DDI de país válido responde 422. Ele identifica o contato no upsert e define o destinatário no envio de mensagens.
"5511999999999"
E-mail do contato. Não serve para login, já que contato não é usuário do sistema.
"marina@exemplo.com.br"
Identificador do contato no seu sistema. Se você preencher desde a criação, pode reencontrar o contato depois com GET /contacts?code=..., sem depender do telefone, que pode mudar.
"CLI-8842"
Origem do contato. Texto livre, usado nos relatórios.
"Site"
CPF ou CNPJ. Gravado exatamente como enviado, sem formatação.
"12345678909"
Usuário do Instagram, sem o @.
"marina.alves"
Campos personalizados a gravar. Identifique cada campo pela key, que não muda, enquanto o name pode ser renomeado no painel a qualquer momento.
Um valor vazio remove o campo do contato. Campos que não aparecem no corpo ficam como estão.
A gravação é tudo ou nada. Se algum valor não passar na validação do tipo, a resposta é 400 e nenhum campo é gravado.
Show child attributes
Show child attributes
Página em que o contato converteu, como a URL do anúncio ou do formulário.
"https://loja.exemplo.com.br/promo"
Id, no provedor, do anúncio ou da publicação que originou o contato.
"23851234567890123"
Título do anúncio ou da publicação de origem.
"Coleção de inverno"
Parâmetro utm_source da origem. É usado no relatório de conversas.
"instagram"
Parâmetro utm_medium.
"cpc"
Parâmetro utm_campaign.
"inverno-2026"
Parâmetro utm_id, quando a plataforma de anúncios o envia.
"6543210987"
Resposta
OK
Show child attributes
Show child attributes
{ "id": 842, "name": "Maria Silva", "number": "5511987654321", "numberCountry": "BR", "email": "maria.silva@exemplo.com.br", "code": "CLI-00842", "cpfCnpj": "12345678909", "origin": "site", "profilePicUrl": "https://cdn.exemplo.com/avatars/842.jpg", "isGroup": false, "instagramUsername": "maria.silva", "lid": null, "sourceUrl": "https://loja.exemplo.com.br/promo", "sourceId": "23851234567890123", "headline": "Coleção de inverno", "mediaType": "image", "mediaUrl": "https://cdn.exemplo.com/anuncios/inverno.jpg", "utmSource": "instagram", "utmMedium": "cpc", "utmCampaign": "inverno-2026", "utmId": "6543210987", "fbclid": "IwAR0xYzAbC123", "gclid": null, "ctwaClid": null, "tags": [ { "id": 3, "name": "Cliente VIP", "color": "#6941C6" } ], "customFields": [ { "key": "plano", "value": "Ouro", "customFieldId": 91, "name": "Plano", "type": "select" } ], "lastChannel": { "id": 11, "name": "Instagram Loja", "type": "instagram" }, "createdAt": "2026-07-14T13:22:05.412Z", "updatedAt": "2026-08-18T09:41:17.883Z" }
curl --request PUT \
--url https://api.connectadesk.com/api/v1/contacts/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"origin": "Site",
"cpfcnpj": "12345678909",
"instagramUsername": "marina.alves",
"customFields": [
{
"id": "plano",
"value": "Ouro"
}
],
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987"
}
'import requests
url = "https://api.connectadesk.com/api/v1/contacts/{id}"
payload = {
"name": "Marina Alves",
"number": "5511999999999",
"email": "marina@exemplo.com.br",
"code": "CLI-8842",
"origin": "Site",
"cpfcnpj": "12345678909",
"instagramUsername": "marina.alves",
"customFields": [
{
"id": "plano",
"value": "Ouro"
}
],
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Marina Alves',
number: '5511999999999',
email: 'marina@exemplo.com.br',
code: 'CLI-8842',
origin: 'Site',
cpfcnpj: '12345678909',
instagramUsername: 'marina.alves',
customFields: [{id: 'plano', value: 'Ouro'}],
sourceUrl: 'https://loja.exemplo.com.br/promo',
sourceId: '23851234567890123',
headline: 'Coleção de inverno',
utmSource: 'instagram',
utmMedium: 'cpc',
utmCampaign: 'inverno-2026',
utmId: '6543210987'
})
};
fetch('https://api.connectadesk.com/api/v1/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://api.connectadesk.com/api/v1/contacts/{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([
'name' => 'Marina Alves',
'number' => '5511999999999',
'email' => 'marina@exemplo.com.br',
'code' => 'CLI-8842',
'origin' => 'Site',
'cpfcnpj' => '12345678909',
'instagramUsername' => 'marina.alves',
'customFields' => [
[
'id' => 'plano',
'value' => 'Ouro'
]
],
'sourceUrl' => 'https://loja.exemplo.com.br/promo',
'sourceId' => '23851234567890123',
'headline' => 'Coleção de inverno',
'utmSource' => 'instagram',
'utmMedium' => 'cpc',
'utmCampaign' => 'inverno-2026',
'utmId' => '6543210987'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.connectadesk.com/api/v1/contacts/{id}"
payload := strings.NewReader("{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.connectadesk.com/api/v1/contacts/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.connectadesk.com/api/v1/contacts/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Marina Alves\",\n \"number\": \"5511999999999\",\n \"email\": \"marina@exemplo.com.br\",\n \"code\": \"CLI-8842\",\n \"origin\": \"Site\",\n \"cpfcnpj\": \"12345678909\",\n \"instagramUsername\": \"marina.alves\",\n \"customFields\": [\n {\n \"id\": \"plano\",\n \"value\": \"Ouro\"\n }\n ],\n \"sourceUrl\": \"https://loja.exemplo.com.br/promo\",\n \"sourceId\": \"23851234567890123\",\n \"headline\": \"Coleção de inverno\",\n \"utmSource\": \"instagram\",\n \"utmMedium\": \"cpc\",\n \"utmCampaign\": \"inverno-2026\",\n \"utmId\": \"6543210987\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": 842,
"name": "Maria Silva",
"number": "5511987654321",
"numberCountry": "BR",
"email": "maria.silva@exemplo.com.br",
"code": "CLI-00842",
"cpfCnpj": "12345678909",
"origin": "site",
"profilePicUrl": "https://cdn.exemplo.com/avatars/842.jpg",
"isGroup": false,
"instagramUsername": "maria.silva",
"lid": null,
"sourceUrl": "https://loja.exemplo.com.br/promo",
"sourceId": "23851234567890123",
"headline": "Coleção de inverno",
"mediaType": "image",
"mediaUrl": "https://cdn.exemplo.com/anuncios/inverno.jpg",
"utmSource": "instagram",
"utmMedium": "cpc",
"utmCampaign": "inverno-2026",
"utmId": "6543210987",
"fbclid": "IwAR0xYzAbC123",
"gclid": null,
"ctwaClid": null,
"tags": [
{
"id": 3,
"name": "Cliente VIP",
"color": "#6941C6"
}
],
"customFields": [
{
"key": "plano",
"value": "Ouro",
"customFieldId": 91,
"name": "Plano",
"type": "select"
}
],
"lastChannel": {
"id": 11,
"name": "Instagram Loja",
"type": "instagram"
},
"createdAt": "2026-07-14T13:22:05.412Z",
"updatedAt": "2026-08-18T09:41:17.883Z"
}
}{
"error": {
"code": "ERR_API_NOT_FOUND",
"message": "Registro não encontrado."
}
}{
"error": {
"code": "ERR_API_IDEMPOTENCY_KEY_REUSED",
"message": "Idempotency-Key já usada com um corpo diferente."
}
}{
"error": {
"code": "ERR_API_VALIDATION",
"message": "O parâmetro `application` é obrigatório e aceita \"contact\" ou \"card\"."
}
}
