curl --request POST \
--url https://{subdomain}.conveyour.com/api/notes \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left voicemail about orientation."
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '64a1b2c3d4e5f6a7b8c9d0e1',
body: JSON.stringify('Left voicemail about orientation.')
})
};
fetch('https://{subdomain}.conveyour.com/api/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '64a1b2c3d4e5f6a7b8c9d0e1',
body: JSON.stringify('Left voicemail about orientation.')
})
};
fetch('https://{subdomain}.conveyour.com/api/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/notes"
payload = {
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left voicemail about orientation."
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/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([
'contact_id' => '64a1b2c3d4e5f6a7b8c9d0e1',
'body' => 'Left voicemail about orientation.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "note record created",
"data": {
"id": 1024,
"created_at": "2026-07-29 14:03:11",
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"contact_name": "John Smith"
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}Create a note
Creates a note attached to a contact. The caller must own (or share) the contact, or the request is rejected.
Create a note attached to a contact
curl --request POST \
--url https://{subdomain}.conveyour.com/api/notes \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left voicemail about orientation."
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '64a1b2c3d4e5f6a7b8c9d0e1',
body: JSON.stringify('Left voicemail about orientation.')
})
};
fetch('https://{subdomain}.conveyour.com/api/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '64a1b2c3d4e5f6a7b8c9d0e1',
body: JSON.stringify('Left voicemail about orientation.')
})
};
fetch('https://{subdomain}.conveyour.com/api/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/notes"
payload = {
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left voicemail about orientation."
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/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([
'contact_id' => '64a1b2c3d4e5f6a7b8c9d0e1',
'body' => 'Left voicemail about orientation.'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-conveyour-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"status": "ok",
"message": "note record created",
"data": {
"id": 1024,
"created_at": "2026-07-29 14:03:11",
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"contact_name": "John Smith"
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}Authorizations
Your API key token. Contacts endpoints require a Server-only — Full API key — see Authentication.
Query Parameters
Team scope for the request, as one or more team ObjectIds. The brackets are required: PHP keeps only the last value for a repeated plain key, so teams=A&teams=B silently resolves to B alone. On requests with a JSON body you may send teams (no brackets) in the body instead.
Values that are not valid ObjectIds are silently ignored — a mistyped team ID behaves as if no team was sent. See the teams section of the API conventions guide.
Body
ID of the contact this note is attached to. The note is rejected if the contact is not yours.
The note text. Supports @First_Last mentions, which email the mentioned user.
Pin the note so it sorts to the top of a contact's notes.
Make the note visible to all teams.
Team IDs to grant visibility of this note.
Team IDs to revoke visibility of this note.
Response
Success.