Update one or more contacts
curl --request PATCH \
--url https://api.greentick.ai/v1/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "+91 98765 43210",
"notes": "<string>",
"attributes": [
{
"id": "<string>",
"value": "<string>"
}
],
"labels": [
"668f1a2b3c4d5e6f7a8b9c10"
]
}
'import requests
url = "https://api.greentick.ai/v1/contacts"
payload = {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "+91 98765 43210",
"notes": "<string>",
"attributes": [
{
"id": "<string>",
"value": "<string>"
}
],
"labels": ["668f1a2b3c4d5e6f7a8b9c10"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
firstName: '<string>',
lastName: '<string>',
phoneNumber: '+91 98765 43210',
notes: '<string>',
attributes: [{id: '<string>', value: '<string>'}],
labels: ['668f1a2b3c4d5e6f7a8b9c10']
})
};
fetch('https://api.greentick.ai/v1/contacts', 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.greentick.ai/v1/contacts",
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([
'id' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'phoneNumber' => '+91 98765 43210',
'notes' => '<string>',
'attributes' => [
[
'id' => '<string>',
'value' => '<string>'
]
],
'labels' => [
'668f1a2b3c4d5e6f7a8b9c10'
]
]),
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.greentick.ai/v1/contacts"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.greentick.ai/v1/contacts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.greentick.ai/v1/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": false,
"code": "INVALID_TO",
"message": "to (E.164 phone) is required"
}Contacts
Update one or more contacts
Updates active contacts only. Soft-deleted contacts are treated as permanently removed (404). The deleted flag cannot be set via the API. If labels or attributes are included, every id must exist for the connected phone number (from GET /labels and GET /attributes) or the request fails with 400.
PATCH
/
contacts
Update one or more contacts
curl --request PATCH \
--url https://api.greentick.ai/v1/contacts \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "+91 98765 43210",
"notes": "<string>",
"attributes": [
{
"id": "<string>",
"value": "<string>"
}
],
"labels": [
"668f1a2b3c4d5e6f7a8b9c10"
]
}
'import requests
url = "https://api.greentick.ai/v1/contacts"
payload = {
"id": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "+91 98765 43210",
"notes": "<string>",
"attributes": [
{
"id": "<string>",
"value": "<string>"
}
],
"labels": ["668f1a2b3c4d5e6f7a8b9c10"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
firstName: '<string>',
lastName: '<string>',
phoneNumber: '+91 98765 43210',
notes: '<string>',
attributes: [{id: '<string>', value: '<string>'}],
labels: ['668f1a2b3c4d5e6f7a8b9c10']
})
};
fetch('https://api.greentick.ai/v1/contacts', 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.greentick.ai/v1/contacts",
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([
'id' => '<string>',
'firstName' => '<string>',
'lastName' => '<string>',
'phoneNumber' => '+91 98765 43210',
'notes' => '<string>',
'attributes' => [
[
'id' => '<string>',
'value' => '<string>'
]
],
'labels' => [
'668f1a2b3c4d5e6f7a8b9c10'
]
]),
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.greentick.ai/v1/contacts"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.greentick.ai/v1/contacts")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.greentick.ai/v1/contacts")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"phoneNumber\": \"+91 98765 43210\",\n \"notes\": \"<string>\",\n \"attributes\": [\n {\n \"id\": \"<string>\",\n \"value\": \"<string>\"\n }\n ],\n \"labels\": [\n \"668f1a2b3c4d5e6f7a8b9c10\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"success": false,
"code": "INVALID_TO",
"message": "to (E.164 phone) is required"
}Authorizations
Create an API key in GreenTick Developer settings. Send it as Authorization: Bearer gt_live_… (Bearer prefix required).
Body
application/json
- object
- object[]
GreenTick contact ID to update.
Maximum string length:
100Maximum string length:
100Optional. When set, normalized to digits including country code.
Example:
"+91 98765 43210"
Show child attributes
Show child attributes
Label definition IDs from GET /labels
Example:
["668f1a2b3c4d5e6f7a8b9c10"]
Response
Contacts updated

