curl --request DELETE \
--url https://api.cloudtalk.io/v1/contacts/{contactId}/tags \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.cloudtalk.io/v1/contacts/{contactId}/tags"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.cloudtalk.io/v1/contacts/{contactId}/tags', 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.cloudtalk.io/v1/contacts/{contactId}/tags",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloudtalk.io/v1/contacts/{contactId}/tags"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.cloudtalk.io/v1/contacts/{contactId}/tags")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudtalk.io/v1/contacts/{contactId}/tags")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"id": "44210",
"type": "contact",
"name": "Jane Doe",
"title": "Head of Procurement",
"company": "Acme Inc.",
"industry": "Manufacturing",
"website": "https://acme.example.com",
"address": "1 Market Street",
"city": "San Francisco",
"state": "CA",
"zip": "94105",
"country": {
"code": "US",
"name": "United States"
},
"phones": [
"+12025550143",
"+13105550166"
],
"emails": [
"[email protected]"
],
"tags": [],
"customFields": {
"Segment": "enterprise"
},
"favoriteUserId": "7",
"source": "api",
"createdAt": "2026-08-17T09:34:21Z",
"updatedAt": "2026-11-02T10:30:00Z",
"dashboardUrl": "https://dashboard.cloudtalk.io/menu/contacts/details/44210"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"code": "UNAUTHORIZED",
"message": "You are not authorized to access this resource."
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}<string>{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}Remove tags from a contact
Removes the listed tags from the contact and returns the updated contact. Tags the contact does not have are ignored, so a repeated request is safe and changes nothing. Only the tags you list are removed: a request running at the same time that adds other tags is not undone by this one.
When at least one tag changed, updatedAt moves forward and contact.updated is sent, and CloudTalk exports the change to your active CRM integrations. Dialer campaigns that selected the contact by one of these tags release it, usually within a minute and at most within one Dialer reconcile (5 minutes by default).
Read-only tags cannot be removed (see List contact tags).
curl --request DELETE \
--url https://api.cloudtalk.io/v1/contacts/{contactId}/tags \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://api.cloudtalk.io/v1/contacts/{contactId}/tags"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://api.cloudtalk.io/v1/contacts/{contactId}/tags', 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.cloudtalk.io/v1/contacts/{contactId}/tags",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.cloudtalk.io/v1/contacts/{contactId}/tags"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://api.cloudtalk.io/v1/contacts/{contactId}/tags")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudtalk.io/v1/contacts/{contactId}/tags")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body{
"id": "44210",
"type": "contact",
"name": "Jane Doe",
"title": "Head of Procurement",
"company": "Acme Inc.",
"industry": "Manufacturing",
"website": "https://acme.example.com",
"address": "1 Market Street",
"city": "San Francisco",
"state": "CA",
"zip": "94105",
"country": {
"code": "US",
"name": "United States"
},
"phones": [
"+12025550143",
"+13105550166"
],
"emails": [
"[email protected]"
],
"tags": [],
"customFields": {
"Segment": "enterprise"
},
"favoriteUserId": "7",
"source": "api",
"createdAt": "2026-08-17T09:34:21Z",
"updatedAt": "2026-11-02T10:30:00Z",
"dashboardUrl": "https://dashboard.cloudtalk.io/menu/contacts/details/44210"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"code": "UNAUTHORIZED",
"message": "You are not authorized to access this resource."
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}<string>{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"details": [
{
"code": "<string>",
"message": "<string>",
"target": "<string>"
}
],
"target": "<string>"
},
"requestId": "<string>"
}Authorizations
HTTP Basic Authentication. Use your API Access Key ID as the username and your API Access Key Secret as the password. Generate keys in the CloudTalk Dashboard under Account -> Settings -> API Keys (https://dashboard.cloudtalk.io/menu/account/settings/API-keys).
Path Parameters
The contact id.
"44210"
Query Parameters
1 to 50 comma-separated contact tag ids.
"123,131"
Response
The contact, with its tags after the change.
A contact or lead, with every number, email, tag and custom field.
Contact id.
"44210"
contact, lead The contact's name. null only for an older contact saved without one: contacts created through this API always have a name, and an update cannot clear it.
1 - 150"Jane Doe"
25510010010025525525515Show child attributes
Show child attributes
Every number on the contact, in E.164.
["+12025550143"]
The contact's contact tags. Integration tags are not listed.
Show child attributes
Show child attributes
Custom field values as strings, keyed by the field name from List contact fields.
Show child attributes
Show child attributes
{ "Segment": "enterprise" }
The user who owns the contact.
"7"
Where the contact came from. Contacts created through this API have api. Read-only.
"api"
Time of the last change. It moves on changes made through this API, the Dashboard contact form and CSV import. Dashboard bulk edits, CRM list sync, and renaming or deleting a contact tag do not move it.
Link to the contact's page in the CloudTalk Dashboard. It carries no credentials: the person must be signed in to your company's Dashboard, and your company must have Contacts in its menu, otherwise the Dashboard opens their default page. Read-only.
"https://dashboard.cloudtalk.io/menu/contacts/details/44210"