curl --request PATCH \
--url https://app.timelines.ai/integrations/api/chats/{chat_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "John Doe",
"responsible": "john.doe@acme.com",
"closed": false,
"read": true,
"chatgpt_autoresponse_enabled": true
}
'import requests
url = "https://app.timelines.ai/integrations/api/chats/{chat_id}"
payload = {
"name": "John Doe",
"responsible": "john.doe@acme.com",
"closed": False,
"read": True,
"chatgpt_autoresponse_enabled": True
}
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({
name: 'John Doe',
responsible: 'john.doe@acme.com',
closed: false,
read: true,
chatgpt_autoresponse_enabled: true
})
};
fetch('https://app.timelines.ai/integrations/api/chats/{chat_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://app.timelines.ai/integrations/api/chats/{chat_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([
'name' => 'John Doe',
'responsible' => 'john.doe@acme.com',
'closed' => false,
'read' => true,
'chatgpt_autoresponse_enabled' => true
]),
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://app.timelines.ai/integrations/api/chats/{chat_id}"
payload := strings.NewReader("{\n \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\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://app.timelines.ai/integrations/api/chats/{chat_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.timelines.ai/integrations/api/chats/{chat_id}")
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 \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"data": {
"id": "1000001",
"name": "John Doe",
"jid": "14840000000@s.whatsapp.net",
"is_group": false,
"closed": false,
"read": true,
"labels": [
"label1",
"label2",
"label3"
],
"chatgpt_autoresponse_enabled": true,
"whatsapp_account_id": "972502222222@s.whatsapp.net",
"chat_url": "https://app.timelines.ai/chat/1000001/messages/",
"created_timestamp": "2024-01-08 10:35:18 +0200",
"unattended": false,
"photo": "https://acme.com/logo.png",
"phone": "+972501111111",
"responsible_email": "kate.smitch@acme.com",
"responsible_name": "Kate Smith",
"last_message_uid": "4f43a9a0-b87e-4667-adfd-689674c3326c",
"last_message_timestamp": "2024-01-29 13:55:04 +0200",
"group_members": [
{
"name": "John Doe",
"phone": "+972502222222",
"role": "admin",
"chat_id": 123456
}
],
"is_allowed_to_message": true
}
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}Update Chat
Update chat’s name, assign responsible, or close/re-open a chat.
curl --request PATCH \
--url https://app.timelines.ai/integrations/api/chats/{chat_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "John Doe",
"responsible": "john.doe@acme.com",
"closed": false,
"read": true,
"chatgpt_autoresponse_enabled": true
}
'import requests
url = "https://app.timelines.ai/integrations/api/chats/{chat_id}"
payload = {
"name": "John Doe",
"responsible": "john.doe@acme.com",
"closed": False,
"read": True,
"chatgpt_autoresponse_enabled": True
}
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({
name: 'John Doe',
responsible: 'john.doe@acme.com',
closed: false,
read: true,
chatgpt_autoresponse_enabled: true
})
};
fetch('https://app.timelines.ai/integrations/api/chats/{chat_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://app.timelines.ai/integrations/api/chats/{chat_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([
'name' => 'John Doe',
'responsible' => 'john.doe@acme.com',
'closed' => false,
'read' => true,
'chatgpt_autoresponse_enabled' => true
]),
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://app.timelines.ai/integrations/api/chats/{chat_id}"
payload := strings.NewReader("{\n \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\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://app.timelines.ai/integrations/api/chats/{chat_id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.timelines.ai/integrations/api/chats/{chat_id}")
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 \"name\": \"John Doe\",\n \"responsible\": \"john.doe@acme.com\",\n \"closed\": false,\n \"read\": true,\n \"chatgpt_autoresponse_enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"status": "ok",
"data": {
"id": "1000001",
"name": "John Doe",
"jid": "14840000000@s.whatsapp.net",
"is_group": false,
"closed": false,
"read": true,
"labels": [
"label1",
"label2",
"label3"
],
"chatgpt_autoresponse_enabled": true,
"whatsapp_account_id": "972502222222@s.whatsapp.net",
"chat_url": "https://app.timelines.ai/chat/1000001/messages/",
"created_timestamp": "2024-01-08 10:35:18 +0200",
"unattended": false,
"photo": "https://acme.com/logo.png",
"phone": "+972501111111",
"responsible_email": "kate.smitch@acme.com",
"responsible_name": "Kate Smith",
"last_message_uid": "4f43a9a0-b87e-4667-adfd-689674c3326c",
"last_message_timestamp": "2024-01-29 13:55:04 +0200",
"group_members": [
{
"name": "John Doe",
"phone": "+972502222222",
"role": "admin",
"chat_id": 123456
}
],
"is_allowed_to_message": true
}
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}{
"message": "<string>",
"status": "error",
"error_code": "validation_error",
"errors": [
{
"fields": [
"url"
],
"msg": "must be a valid http(s) URL"
}
]
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
an id of the chat as appears in TimelinesAI (can be found in the URL of the chat page, or in the payload of outbound webhook). Supports sending messages to a group.
Body
Chat's name (must be unique in workspace)
256"John Doe"
Assign team member as responsible (specified by registration email in TimelinesAI) or unassign a chat from responsible by supplying an empty string ("").
"john.doe@acme.com"
Is the chart closed (true) or open (false)
false
Is the chat read (true) or unread (false)
true
Set the AI Agent (ChatGPT autoresponse) on or off for this chat. Setting true mirrors the in-app AI Agent switch — it clears any "auto-disabled by outgoing response" lock and re-arms the agent so it will reply to the next inbound message. Setting false turns the agent off for this chat.
true

