On this page
startTrainingPractice
mutation · in the family Your own session
What it does
Start a practice run of a course’s test — the same draw a sitting makes, rehearsed against your pass mark; nothing is certified.
Start YOUR OWN practice of a course's test (🎓: the SAME draw a sitting makes (10 ACTIVE questions, every one when fewer; below 3 refuses CONFLICT/TRAINING_TOO_FEW_QUESTIONS) written into your own progress record — a NEW start REPLACES an open practice (never a conflict); at most 20 starts per course per UTC day (CONFLICT/TRAINING_CAP · cap practice_per_day). passMark = the strictest active requirement binding your roles for the course, else 80. The answer carries NO keys. A practice never touches your sittings, never mints a certificate, never notifies. Requires the unrestricted capability on a USER session.
What happens
Writes only your own progress record; a new start replaces the open practice; at most twenty a day.
Who may call it
Capability area: Your own session — What every signed-in person may do for themselves — their session, their profile and their own work.
- Owner
- System Administrator
- Manager
- Associate Manager
- Warehouse Associate
- Sales Associate
- Cashier
- An API key whose scope allows
api:startTrainingPractice
Arguments
| Name | Type | Required | Notes |
|---|---|---|---|
courseKey | String String! | yes | No further notes. |
Returns
TrainingPracticeSitting TrainingPracticeSitting! — A practice draw opened: the course, the pass mark you rehearse against (the strictest rule binding your roles for the course, else 80), the drawn questions in the order asked, when. Nothing is certified.
Example request
mutation ExampleStartTrainingPractice($courseKey: String!) {
startTrainingPractice(courseKey: $courseKey) {
courseKey
passMark
startedAt
}
}
Variables:
{
"courseKey": "<course key>"
}
Send it with the envelope naming the version: "extensions": {"at": {"version": {"name":"genesis","number":0}}}.
Example response
{
"data": {
"startTrainingPractice": {
"courseKey": "<course key>",
"passMark": 1,
"startedAt": "2027-01-31T00:00:00.000Z"
}
},
"extensions": {
"at": {
"callId": "01EXAMPLE-CALL-ID",
"version": {
"requested": {
"name": "genesis",
"number": 0
},
"serviced": {
"name": "genesis",
"number": 0
}
}
}
}
}
Errors this call can answer
VALIDATION/INVALID— Something in the request is not valid. (VALIDATION)AUTHN/REQUIRED— Sign in to do this. (AUTHN)AUTHZ/FORBIDDEN— Your role does not allow this action. (AUTHZ)RATE_LIMIT/THROTTLED— Too many requests in a short time. (RATE_LIMIT)CONFLICT/*— The record’s state, or a change made in the meantime, does not allow this; the codes are on the CONFLICT page. (CONFLICT)VALIDATION/VERSION_REQUIRED— The request did not say which app version it came from. (VALIDATION)