curl --request GET \
--url https://{subdomain}.conveyour.com/api/notes \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
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: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
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"
headers = {"x-conveyour-token": "<api-key>"}
response = requests.get(url, 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 => "GET",
CURLOPT_HTTPHEADER => [
"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": "2 notes found",
"data": {
"results": [
{
"id": 1024,
"org_id": 990,
"user_id": 42,
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left a voicemail, following up @Jane_Doe",
"pinned": true,
"all_teams": false,
"created_at": "2026-07-29 14:03:11",
"updated_at": "2026-07-29 14:03:11",
"contact_name": "John Smith",
"user_name": "Alex Rivera"
}
],
"page": 1,
"pages": 1,
"count": 2
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}List notes
Returns a paginated list of notes (50 per page). Filter by contact and/or search the note body.
List notes (paginated, 50/page); filter by contact, search, all_teams
Response shape: data is an object with count, page, pages and results. It does not return per_page, has_more or has_less.
curl --request GET \
--url https://{subdomain}.conveyour.com/api/notes \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
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: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
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"
headers = {"x-conveyour-token": "<api-key>"}
response = requests.get(url, 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 => "GET",
CURLOPT_HTTPHEADER => [
"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": "2 notes found",
"data": {
"results": [
{
"id": 1024,
"org_id": 990,
"user_id": 42,
"contact_id": "64a1b2c3d4e5f6a7b8c9d0e1",
"body": "Left a voicemail, following up @Jane_Doe",
"pinned": true,
"all_teams": false,
"created_at": "2026-07-29 14:03:11",
"updated_at": "2026-07-29 14:03:11",
"contact_name": "John Smith",
"user_name": "Alex Rivera"
}
],
"page": 1,
"pages": 1,
"count": 2
}
}{
"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
Filter to notes attached to this contact ID. When set, pinned notes are returned first.
Filter to notes whose body contains this text (substring match).
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.
Include notes from every team the caller can see, not just the scoped team.
Response
Success.
The common response envelope shared by all ConveYour endpoints.