curl --request POST \
--url https://{subdomain}.conveyour.com/api/bookmarks \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"name": "Active reps",
"filters": {
"status": "active"
}
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Active reps', filters: {status: 'active'}})
};
fetch('https://{subdomain}.conveyour.com/api/bookmarks', 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({name: 'Active reps', filters: {status: 'active'}})
};
fetch('https://{subdomain}.conveyour.com/api/bookmarks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/bookmarks"
payload = {
"name": "Active reps",
"filters": { "status": "active" }
}
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/bookmarks",
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([
'name' => 'Active reps',
'filters' => [
'status' => 'active'
]
]),
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": "bookmark created",
"data": {
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "Active Reps - Southwest"
}
}{
"status": "failed",
"message": "Token is either expired or does not have the correct permissions",
"data": []
}Create a group
Creates a new bookmark (group).
Groups are called bookmarks in the API. The UI calls these Groups, but the model and every route use bookmarks. The name describes what the record actually is: a saved contact filter query — filters is a required field, and the saved query is what defines the segment, whether dynamic or static. “Bookmark” was the original word for saving that query; the UI later settled on “Group” for the same thing. Endpoint paths stay /api/bookmarks — only the naming in these docs follows the UI.
curl --request POST \
--url https://{subdomain}.conveyour.com/api/bookmarks \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"name": "Active reps",
"filters": {
"status": "active"
}
}
'const options = {
method: 'POST',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({name: 'Active reps', filters: {status: 'active'}})
};
fetch('https://{subdomain}.conveyour.com/api/bookmarks', 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({name: 'Active reps', filters: {status: 'active'}})
};
fetch('https://{subdomain}.conveyour.com/api/bookmarks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/bookmarks"
payload = {
"name": "Active reps",
"filters": { "status": "active" }
}
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/bookmarks",
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([
'name' => 'Active reps',
'filters' => [
'status' => 'active'
]
]),
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": "bookmark created",
"data": {
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"name": "Active Reps - Southwest"
}
}{
"status": "failed",
"message": "Token is either expired or does not have the correct permissions",
"data": []
}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
Response
Success.
The common response envelope shared by all ConveYour endpoints.
ok on success, failed on error.
ok, failed Human-readable description of the result.
A bookmark (saved contact filter, shown as a Group in the UI). Returns the stored attributes and adds editable, computed for the requesting user.
Show child attributes
Show child attributes