curl --request PUT \
--url https://{subdomain}.conveyour.com/api/compliance/config \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"enabled": true,
"callback_url": "<string>",
"lesson_tags_all": [
"<string>"
],
"lesson_tags_any": [
"<string>"
],
"completed_after": "<string>",
"released_only": true,
"released_after": "<string>",
"submission_enabled": true,
"submission_completed_statuses": [
"<string>"
],
"submission_collection_ids": [
"<string>"
]
}
'const options = {
method: 'PUT',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
callback_url: '<string>',
lesson_tags_all: ['<string>'],
lesson_tags_any: ['<string>'],
completed_after: '<string>',
released_only: true,
released_after: '<string>',
submission_enabled: true,
submission_completed_statuses: ['<string>'],
submission_collection_ids: ['<string>']
})
};
fetch('https://{subdomain}.conveyour.com/api/compliance/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'PUT',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
callback_url: '<string>',
lesson_tags_all: ['<string>'],
lesson_tags_any: ['<string>'],
completed_after: '<string>',
released_only: true,
released_after: '<string>',
submission_enabled: true,
submission_completed_statuses: ['<string>'],
submission_collection_ids: ['<string>']
})
};
fetch('https://{subdomain}.conveyour.com/api/compliance/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/compliance/config"
payload = {
"enabled": True,
"callback_url": "<string>",
"lesson_tags_all": ["<string>"],
"lesson_tags_any": ["<string>"],
"completed_after": "<string>",
"released_only": True,
"released_after": "<string>",
"submission_enabled": True,
"submission_completed_statuses": ["<string>"],
"submission_collection_ids": ["<string>"]
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/compliance/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'enabled' => true,
'callback_url' => '<string>',
'lesson_tags_all' => [
'<string>'
],
'lesson_tags_any' => [
'<string>'
],
'completed_after' => '<string>',
'released_only' => true,
'released_after' => '<string>',
'submission_enabled' => true,
'submission_completed_statuses' => [
'<string>'
],
'submission_collection_ids' => [
'<string>'
]
]),
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": "Compliance configuration updated",
"data": {
"enabled": true,
"lesson_tags_all": [
"required-training"
],
"completed_after": "-1 year",
"released_only": true,
"submission_enabled": true,
"submission_completed_statuses": [
"completed"
]
}
}{
"status": "failed",
"message": "Lacking necessary permission add_contacts",
"data": {
"permission": "add_contacts"
}
}Update compliance configuration
Updates the compliance configuration settings for your org. Accepts the same keys returned by GET /api/compliance/config.
Update org compliance settings
Permission: Org admin only. Denials read Manage Compliance.
Not callable with an API key. Requires an org admin. Service accounts cannot be assigned the admin role and their role cannot be changed, so every API key gets 403. Only a signed-in admin can call it.
curl --request PUT \
--url https://{subdomain}.conveyour.com/api/compliance/config \
--header 'Content-Type: application/json' \
--header 'x-conveyour-token: <api-key>' \
--data '
{
"enabled": true,
"callback_url": "<string>",
"lesson_tags_all": [
"<string>"
],
"lesson_tags_any": [
"<string>"
],
"completed_after": "<string>",
"released_only": true,
"released_after": "<string>",
"submission_enabled": true,
"submission_completed_statuses": [
"<string>"
],
"submission_collection_ids": [
"<string>"
]
}
'const options = {
method: 'PUT',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
callback_url: '<string>',
lesson_tags_all: ['<string>'],
lesson_tags_any: ['<string>'],
completed_after: '<string>',
released_only: true,
released_after: '<string>',
submission_enabled: true,
submission_completed_statuses: ['<string>'],
submission_collection_ids: ['<string>']
})
};
fetch('https://{subdomain}.conveyour.com/api/compliance/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));const options = {
method: 'PUT',
headers: {'x-conveyour-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
enabled: true,
callback_url: '<string>',
lesson_tags_all: ['<string>'],
lesson_tags_any: ['<string>'],
completed_after: '<string>',
released_only: true,
released_after: '<string>',
submission_enabled: true,
submission_completed_statuses: ['<string>'],
submission_collection_ids: ['<string>']
})
};
fetch('https://{subdomain}.conveyour.com/api/compliance/config', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://{subdomain}.conveyour.com/api/compliance/config"
payload = {
"enabled": True,
"callback_url": "<string>",
"lesson_tags_all": ["<string>"],
"lesson_tags_any": ["<string>"],
"completed_after": "<string>",
"released_only": True,
"released_after": "<string>",
"submission_enabled": True,
"submission_completed_statuses": ["<string>"],
"submission_collection_ids": ["<string>"]
}
headers = {
"x-conveyour-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{subdomain}.conveyour.com/api/compliance/config",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'enabled' => true,
'callback_url' => '<string>',
'lesson_tags_all' => [
'<string>'
],
'lesson_tags_any' => [
'<string>'
],
'completed_after' => '<string>',
'released_only' => true,
'released_after' => '<string>',
'submission_enabled' => true,
'submission_completed_statuses' => [
'<string>'
],
'submission_collection_ids' => [
'<string>'
]
]),
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": "Compliance configuration updated",
"data": {
"enabled": true,
"lesson_tags_all": [
"required-training"
],
"completed_after": "-1 year",
"released_only": true,
"submission_enabled": true,
"submission_completed_statuses": [
"completed"
]
}
}{
"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
Enable or disable compliance for this org.
Default webhook URL for async compliance results.
Lessons must have every tag in this list to be in scope.
Lessons must have at least one tag in this list to be in scope.
Relative time window for lesson completions (e.g. "-1 year").
When true, only released lessons count toward compliance.
Optional: only lessons released after this time count.
Include form submissions in compliance scoring.
Submission statuses that count as completed.
Limit scoring to specific submission collection IDs.