Help center
Search and read the jeCheck help center (jecheck.io/docs): how features work, where settings are, rules for scores, permissions and plans. Articles are returned in Markdown, in English by default. Available to every token.
GETSearch the help center
GET /help/search
Hybrid keyword and semantic search over help articles. Returns the best matching fragments (at most two per article) with a link to the exact section of the article.
| Token scope | read |
|---|---|
| Permission | Any employee; results follow the token's visibility |
| MCP tool | help_search · read-only |
Query parameters
query
string
Required
Question or keywords, e.g. "how to require a photo after fixing a violation".
Length 2–500.
limit
integer
Number of fragments.
Default
5. Value 1–20.
locale
string
Language of the articles; falls back to English when the language has no articles.
Default
en. enrukkuzkahysrdeResponses
| Status | Description |
|---|---|
| 200 | OK |
| 401 | unauthorized — Missing, invalid, revoked or expired token
|
| 403 | forbidden · insufficient_scope · plan_required — Plan without API access
|
| 422 | validation_failed — Invalid parameters — see error.fields
|
| 429 | rate_limited — Too many requests — retry after Retry-After seconds
|
curl 'https://app.jecheck.io/api/ext/v1/help/search?query=string' \
-H 'Authorization: Bearer $JECHECK_TOKEN'const res = await fetch('https://app.jecheck.io/api/ext/v1/help/search?query=string', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.JECHECK_TOKEN}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://app.jecheck.io/api/ext/v1/help/search",
headers={"Authorization": f"Bearer {os.environ['JECHECK_TOKEN']}"},
params={"query":"string"},
)
res.raise_for_status()
data = res.json()["data"]$client = new GuzzleHttp\Client(['base_uri' => 'https://app.jecheck.io/api/ext/v1/']);
$res = $client->request('GET', 'help/search', [
'headers' => ['Authorization' => 'Bearer ' . getenv('JECHECK_TOKEN')],
'query' => [
'query' => 'string',
],
]);
$data = json_decode($res->getBody(), true)['data'];{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "help_search",
"arguments": {
"query": "string"
}
}
}{
"data": [
{
"article": "Corrective-action loop",
"section": "automation",
"slug": "closed-loop",
"heading": "Photo after the fix",
"excerpt": "…turn on \"Photo after\" so the assignee must attach a photo before sending the task for review…",
"content": "## Photo after the fix\n\nTurn on 'Photo after'…",
"url": "https://jecheck.io/en/docs/automation/closed-loop#photo-after-the-fix",
"score": 0.03226
}
]
}GETList help sections and articles
GET /help/sections
The table of contents of the help center: sections in display order with their articles.
| Token scope | read |
|---|---|
| Permission | Any employee; results follow the token's visibility |
| MCP tool | help_sections · read-only |
Query parameters
locale
string
Language of the articles; falls back to English when the language has no articles.
Default
en. enrukkuzkahysrdeResponses
| Status | Description |
|---|---|
| 200 | OK |
| 401 | unauthorized — Missing, invalid, revoked or expired token
|
| 403 | forbidden · insufficient_scope · plan_required — Plan without API access
|
| 422 | validation_failed — Invalid parameters — see error.fields
|
| 429 | rate_limited — Too many requests — retry after Retry-After seconds
|
curl 'https://app.jecheck.io/api/ext/v1/help/sections?locale=en' \
-H 'Authorization: Bearer $JECHECK_TOKEN'const res = await fetch('https://app.jecheck.io/api/ext/v1/help/sections?locale=en', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.JECHECK_TOKEN}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://app.jecheck.io/api/ext/v1/help/sections",
headers={"Authorization": f"Bearer {os.environ['JECHECK_TOKEN']}"},
params={"locale":"en"},
)
res.raise_for_status()
data = res.json()["data"]$client = new GuzzleHttp\Client(['base_uri' => 'https://app.jecheck.io/api/ext/v1/']);
$res = $client->request('GET', 'help/sections', [
'headers' => ['Authorization' => 'Bearer ' . getenv('JECHECK_TOKEN')],
'query' => [
'locale' => 'en',
],
]);
$data = json_decode($res->getBody(), true)['data'];{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "help_sections",
"arguments": {
"locale": "en"
}
}
}{
"data": [
{
"key": "tasks",
"title": "Tasks",
"app_url": "https://app.jecheck.io/ui/tasks",
"articles": [
{
"section": "tasks",
"slug": "statuses",
"title": "Task statuses",
"description": "What each task status means and who can move a task.",
"updated": "2026-10-17",
"reading_time_minutes": 3,
"url": "https://jecheck.io/en/docs/tasks/statuses"
}
]
}
]
}GETRead a help article
GET /help/articles/{section}/{slug}
Full article in Markdown. section and slug come from help.sections or help.search results.
| Token scope | read |
|---|---|
| Permission | Any employee; results follow the token's visibility |
| MCP tool | help_article · read-only |
Path parameters
section
string
Required
Section key, e.g.
tasks.
Maximum length 64. slug
string
Required
Article slug, e.g.
statuses.
Maximum length 128. Query parameters
locale
string
Language of the articles; falls back to English when the language has no articles.
Default
en. enrukkuzkahysrdeResponses
| Status | Description |
|---|---|
| 200 | OK |
| 401 | unauthorized — Missing, invalid, revoked or expired token
|
| 403 | forbidden · insufficient_scope · plan_required — Plan without API access
|
| 404 | not_found — The record does not exist or is not visible to the token
|
| 422 | validation_failed — Invalid parameters — see error.fields
|
| 429 | rate_limited — Too many requests — retry after Retry-After seconds
|
curl 'https://app.jecheck.io/api/ext/v1/help/articles/string/string?locale=en' \
-H 'Authorization: Bearer $JECHECK_TOKEN'const res = await fetch('https://app.jecheck.io/api/ext/v1/help/articles/string/string?locale=en', {
method: 'GET',
headers: {
Authorization: `Bearer ${process.env.JECHECK_TOKEN}`,
},
});
const { data } = await res.json();import os, requests
res = requests.get(
"https://app.jecheck.io/api/ext/v1/help/articles/string/string",
headers={"Authorization": f"Bearer {os.environ['JECHECK_TOKEN']}"},
params={"locale":"en"},
)
res.raise_for_status()
data = res.json()["data"]$client = new GuzzleHttp\Client(['base_uri' => 'https://app.jecheck.io/api/ext/v1/']);
$res = $client->request('GET', 'help/articles/string/string', [
'headers' => ['Authorization' => 'Bearer ' . getenv('JECHECK_TOKEN')],
'query' => [
'locale' => 'en',
],
]);
$data = json_decode($res->getBody(), true)['data'];{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "help_article",
"arguments": {
"section": "string",
"slug": "string",
"locale": "en"
}
}
}{
"data": {
"section": "tasks",
"slug": "statuses",
"title": "Task statuses",
"description": "What each task status means and who can move a task.",
"updated": "2026-10-17",
"reading_time_minutes": 3,
"url": "https://jecheck.io/en/docs/tasks/statuses",
"markdown": "Every task moves through statuses…\n\n## New\n\nThe task is created…"
}
}