curl --request GET \
--url https://{subdomain}.conveyour.com/api/triggers \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/triggers', 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/triggers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/triggers"
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/triggers",
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": "success",
"data": {
"types": {
"lesson": {
"group": "content",
"name": "Send Lesson",
"doc": ""
}
},
"schemas": {
"lesson": {
"lesson_id": {
"type": "string",
"label": "Lesson"
},
"delay": {
"type": "integer",
"label": "Delay (seconds)"
}
}
},
"results": [
{
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"campaign_id": "64a1b2c3d4e5f6a7b8c9d0e2",
"type": "lesson",
"lesson_id": "64a1b2c3d4e5f6a7b8c9d0e3",
"delay": 0
}
]
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}List triggers
Returns all triggers for the org, optionally filtered by campaign.
List triggers — returns
Permission: Requires automations or campaigns; sending type: "lesson" additionally requires lessons. Denials read Manage Automations or Campaigns.
Response shape: data is a composite object — results alongside schemas, types and related keys. This is not a paginated envelope; page has no effect and there is no count.
How a trigger relates to a campaign. campaign_id in the body decides scoping and is optional:
- Omit it and the trigger is scoped to your team directly — this is the automation case.
- Pass a default (simple) campaign and it is likewise scoped to the team.
- Pass a regular campaign and the trigger is scoped to the org and user instead, with no
team_idstored on it. That is deliberate — storing a team on a trigger inside a shared campaign would produce a campaign only some members can see.
If the campaign id cannot be resolved within your team scope, the request is narrowed rather than rejected, so a wrong id yields an empty or unexpected scope instead of an error.
curl --request GET \
--url https://{subdomain}.conveyour.com/api/triggers \
--header 'x-conveyour-token: <api-key>'const options = {method: 'GET', headers: {'x-conveyour-token': '<api-key>'}};
fetch('https://{subdomain}.conveyour.com/api/triggers', 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/triggers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/triggers"
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/triggers",
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": "success",
"data": {
"types": {
"lesson": {
"group": "content",
"name": "Send Lesson",
"doc": ""
}
},
"schemas": {
"lesson": {
"lesson_id": {
"type": "string",
"label": "Lesson"
},
"delay": {
"type": "integer",
"label": "Delay (seconds)"
}
}
},
"results": [
{
"id": "64a1b2c3d4e5f6a7b8c9d0e1",
"campaign_id": "64a1b2c3d4e5f6a7b8c9d0e2",
"type": "lesson",
"lesson_id": "64a1b2c3d4e5f6a7b8c9d0e3",
"delay": 0
}
]
}
}{
"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 triggers by campaign ID.
Filter triggers by bookmark (group) ID.
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.
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.
The trigger list endpoint returns a composite object, not a bare array: the matching triggers plus the type catalogue and per-type field schemas used to build the editor.
Show child attributes
Show child attributes