curl --request POST \
--url https://api.inbox.adraa.ai/api/v1/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "VIP customer — fast-track any shipping issues.",
"conversationId": "cmbxgz9pq0003ph01m4n5o6p7",
"phone": "+971500000000"
}
'import requests
url = "https://api.inbox.adraa.ai/api/v1/notes"
payload = {
"body": "VIP customer — fast-track any shipping issues.",
"conversationId": "cmbxgz9pq0003ph01m4n5o6p7",
"phone": "+971500000000"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
body: JSON.stringify('VIP customer — fast-track any shipping issues.'),
conversationId: 'cmbxgz9pq0003ph01m4n5o6p7',
phone: '+971500000000'
})
};
fetch('https://api.inbox.adraa.ai/api/v1/notes', 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.inbox.adraa.ai/api/v1/notes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'body' => 'VIP customer — fast-track any shipping issues.',
'conversationId' => 'cmbxgz9pq0003ph01m4n5o6p7',
'phone' => '+971500000000'
]),
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.inbox.adraa.ai/api/v1/notes"
payload := strings.NewReader("{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.inbox.adraa.ai/api/v1/notes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.inbox.adraa.ai/api/v1/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}"
response = http.request(request)
puts response.read_body{
"note": {
"id": "cmbxh3m2b0004ph01y6z7a8b9",
"body": "VIP customer — fast-track any shipping issues.",
"createdAt": "2026-06-10T14:02:00.000Z",
"agent": {
"id": "cmbxgwq1e0000ph01i0j1k2l3",
"nickname": "sara"
}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Provide exactly one of conversationId or phone"
}
}{
"error": {
"code": "INVALID_API_TOKEN",
"message": "Invalid or revoked API token"
}
}{
"error": {
"code": "CONTACT_NOT_FOUND",
"message": "Contact not found"
}
}Add an internal note
Adds an internal note to a contact. Internal notes are private to your workspace — they appear inline in the conversation thread and on the contact panel, and are never visible to the customer. Identify the contact by either conversationId or phone (exactly one). The note’s author is shown as API.
Rate limit: 30 requests per minute.
curl --request POST \
--url https://api.inbox.adraa.ai/api/v1/notes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"body": "VIP customer — fast-track any shipping issues.",
"conversationId": "cmbxgz9pq0003ph01m4n5o6p7",
"phone": "+971500000000"
}
'import requests
url = "https://api.inbox.adraa.ai/api/v1/notes"
payload = {
"body": "VIP customer — fast-track any shipping issues.",
"conversationId": "cmbxgz9pq0003ph01m4n5o6p7",
"phone": "+971500000000"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
body: JSON.stringify('VIP customer — fast-track any shipping issues.'),
conversationId: 'cmbxgz9pq0003ph01m4n5o6p7',
phone: '+971500000000'
})
};
fetch('https://api.inbox.adraa.ai/api/v1/notes', 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.inbox.adraa.ai/api/v1/notes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'body' => 'VIP customer — fast-track any shipping issues.',
'conversationId' => 'cmbxgz9pq0003ph01m4n5o6p7',
'phone' => '+971500000000'
]),
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.inbox.adraa.ai/api/v1/notes"
payload := strings.NewReader("{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.inbox.adraa.ai/api/v1/notes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.inbox.adraa.ai/api/v1/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"body\": \"VIP customer — fast-track any shipping issues.\",\n \"conversationId\": \"cmbxgz9pq0003ph01m4n5o6p7\",\n \"phone\": \"+971500000000\"\n}"
response = http.request(request)
puts response.read_body{
"note": {
"id": "cmbxh3m2b0004ph01y6z7a8b9",
"body": "VIP customer — fast-track any shipping issues.",
"createdAt": "2026-06-10T14:02:00.000Z",
"agent": {
"id": "cmbxgwq1e0000ph01i0j1k2l3",
"nickname": "sara"
}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Provide exactly one of conversationId or phone"
}
}{
"error": {
"code": "INVALID_API_TOKEN",
"message": "Invalid or revoked API token"
}
}{
"error": {
"code": "CONTACT_NOT_FOUND",
"message": "Contact not found"
}
}Authorizations
Workspace API token created in Settings → API. Tokens start with adraa_.
Body
Note text. Maximum 4000 characters.
4000"VIP customer — fast-track any shipping issues."
ID of a conversation whose contact the note is attached to. Provide this or phone, not both. List conversations with GET /api/v1/conversations.
"cmbxgz9pq0003ph01m4n5o6p7"
WhatsApp phone number of the contact, in international format. Provide this or conversationId, not both. Resolves to the contact's most recently active WhatsApp conversation.
3 - 32"+971500000000"
Response
Note added
Show child attributes
Show child attributes