Trainings
Give your people the security and compliance trainings they must complete, remind them on time, and show an auditor who completed what and when.
ISO 27001 and similar standards ask you to show that your people are trained and competent. In devguard, a training is material you already have: a video, a link to a course, or a PDF. You assign it to people or to roles, with a due date and an optional repeat schedule. devguard reminds each person, records each completion with its date, and shows you who is behind.
The tasks below follow the order of the work:
- Add a training
- Assign it
- Follow who has completed it
- Act on overdue people
- Check competence by role
- Record a completion from outside devguard
- Archive, restore or delete a training
Scripts and integrations: see API below.

Add a training
The owner of a training is a business role, not a person. So the training keeps an owner when staff change.
- Open Trainings and choose Add training.
- Enter a Title, such as "Clean desk and screen lock", and a short Description.
- Choose the Training source: YouTube, Vimeo, Link or PDF.
- For every source except PDF, paste the Source URL. A YouTube or Vimeo video plays inside devguard. A link opens in a new tab.
- Choose the Owner role, such as Facilities Management. If you want, enter the Duration (minutes). The assigned person sees the duration before they start.
- Choose Create.
For a PDF, the Edit training panel opens after you create the training. Drop the file on Training PDF, or click to choose it. Only PDF files are accepted, up to 50 MB.
Assign it
Each training has one assignment. You set it in the Assignment card, on the Detail tab or on the Assignment tab.
- Open the training.
- Under Roles, choose the roles whose members must complete it.
- Under Members, add single people who are not in one of those roles.
- Set the First due date.
- Under Repeats on, choose a schedule, such as yearly. Leave it empty for a one-off training.
- Choose Save assignment. The assignment starts at once, and each person in it gets a notice.
Watch out: if you later change First due date or Repeats on, the due dates move. People who had completed the old due date can show as Pending or Overdue again.

How assignments work
Who must complete it
The audience is every person you name, plus every person who is a member of a chosen role. When someone joins a role, the training is assigned to them. When they leave the role, it is not assigned to them anymore. So assign to roles where you can.
Due dates and cycles
A one-off training has one due date. A repeating training has a due date for each repeat of the schedule. Each due date is a cycle. A completion counts for the next due date after it, as the example shows.
For example, Clean desk and screen lock is due every year on 15 October, starting 15.10.2026.
- Jonas completed it on 20.10.2026. That counts for 15.10.2027, so he is done for the current cycle.
- Someone who completed it on 10.10.2026 met the due date of 15.10.2026. They now show as Pending, or Held in the matrix, until they complete it for 15.10.2027.
- A one-off training has only one due date, so any completion counts for it, even a late one.
Each person in the audience has one status:
| Status | Meaning |
|---|---|
| Completed | They completed the current cycle. |
| Pending | The next due date is still ahead, and they have not completed it for that date. |
| Overdue | A due date passed without a completion. |
| Held (matrix only) | They completed an earlier cycle and still hold the training, but it is due again. |
What the assigned person does
People complete trainings in the employee portal, not in this section. There they open the material and tick I have completed this training, then choose Mark as completed. The checkbox unlocks only after they watch a video to the end, scroll to the end of a PDF, or open a link. This is self-attestation: the person confirms it themselves, and devguard records the date.
devguard reminds each person before the due date, and stops when they complete the cycle. The Reminders table says when.
Follow who has completed it
- Open the training and choose the Assignment tab.
- Read the counts above the Completion table: Completed, Pending and Overdue.
- To see only the people who are behind, choose Status, then Overdue.
- The Via column shows how each person is reached: Directly, or through a role.
- To remove a person you named directly, open the row menu and choose Remove from assignment. A person reached through a role stays until they leave the role.
For all trainings at once, open Deadlines. Each open cycle is listed there with its due date and "x of y completed".
Act on overdue people
You cannot send a reminder again by hand. Choose what fits the person:
- If they did the training elsewhere, for example in a classroom, record the completion.
- If they still have to do it, open the training's Tasks tab, add a task, assign it to the person, and set a due date. People who use only the portal see the task there.
- If they work in the app, type
@and their name on the Comments tab. They get a notification.
devguard sends one reminder after each due date a person missed. See Reminders.
Check competence by role
The Competence matrix shows every business role with its members, and one column for each assigned training. Each cell shows Completed with the date, Held with the renewal date, Pending or Overdue. A dash means that the training is not assigned to that person.
- Open Trainings → Competence matrix.
- To see one role, choose it in the role list at the top.
- Turn on Overdue only to keep only the people with at least one overdue training.
- Click a cell to see the last completion: the date, the note, the evidence reference, and whether an admin recorded it or the person confirmed it in the portal.
- Choose Export CSV for the auditor. The file has one row for each role, member and training, with the columns Role, Required competence, Member, Training, Status, Completed on, Note, Evidence reference, Source and Recorded on. A person in two roles appears twice, and a training that is not assigned to them reads Not assigned. The file uses the filters you set.
Under each role name, the matrix shows the role's Required competence. You write it on the role in People → Roles. Clause 7.2 of ISO 27001 and ISO 9001 asks for this record: what each role needs, and what each person has.

Record a completion from outside devguard
An owner or admin can record a training that a person completed elsewhere, such as a classroom session or a first-aid course.
- In the competence matrix, click the person's cell and choose Record completion. On the training's Assignment tab, the row menu has the same action.
- Set Completed on. The date cannot be in the future.
- In Note, write how competence was confirmed, such as "Attended the on-site session".
- If you want, enter an Evidence reference, such as "Training log". It says where the proof is kept.
- Choose Record completion. The cell changes to Completed with the date.
Watch out: you cannot change or delete a recorded completion. Check the date and the note before you save. The other rules are in Recorded completions.

Archive, restore or delete a training
Archive a training that is no longer used but that an auditor may still ask about. Delete only a training that was created by mistake.
Archive
- In the Trainings list, open the training's row menu and choose Archive.
- Choose Archive again to confirm. The assignment ends and the reminders stop. The training and its completions stay.
To see archived trainings, turn on Archived above the list. To end only the assignment and keep the training active, choose Archive assignment at the bottom of the Assignment card.
Restore
- Turn on Archived above the list.
- Open the training's row menu and choose Restore.
- Open the training. In the Assignment card, choose Save assignment to start the assignment again.
Delete
- Open the training's row menu and choose Delete.
- Choose Delete again to confirm. This also deletes the assignment, the completions and the PDF. You cannot undo it.
To delete several trainings, select their rows, choose Delete, then Delete selection.
Reference
Training fields
| Field | Required | Notes |
|---|---|---|
| Title | Yes | 2 to 255 characters. The training's address is made from the title when you create it, and does not change later. |
| Description | No | What the training covers. |
| Training source | Yes | YOUTUBE, VIMEO, LINK or PDF. |
| Source URL | Yes, except for PDF | A full web address starting with http:// or https://. For YouTube, the address of a single video: a watch, share, Shorts or embed link. For Vimeo, the address of a single video, not of a showcase, an album or a channel. |
| Owner role | No | A business role. |
| Duration (minutes) | No | At least one minute. Shown in the list and in the portal. |
| Training PDF | For PDF | A PDF file, up to 50 MB. Added after you create the training. |
Assignment and completion fields
| Field | Required | Notes |
|---|---|---|
| Members | No | People named directly. |
| Roles | No | Everyone in the role, including people who join later. |
| First due date | Yes | The due date of the first cycle. |
| Repeats on | No | A schedule. Empty means one-off. |
| Completed on (recorded) | Yes | Not in the future. |
| Note (recorded) | Yes | Up to 2000 characters. |
| Evidence reference (recorded) | No | Up to 500 characters. |
Recorded completions
- devguard saves who recorded the completion and when. In the portal, the person sees that their administrator recorded it, with the note.
- A person can have one completion per cycle. devguard refuses a second one.
- You cannot record a completion for yourself. Complete your own trainings in the portal.
- A date in an earlier cycle counts for that cycle. For Clean desk and screen lock, a date of 10.10.2026 counts for 15.10.2026, and the person must still complete it for 15.10.2027.
- Certificates are personal data, so they are not uploaded here. The evidence reference says where they are kept.
Reminders
Each person gets a notice when they join the audience, once per training. After that, devguard reminds them:
- a number of days before the due date, which depends on the length of one cycle (table below);
- one day before the due date;
- for a one-off training, once after the due date has passed without a completion. This reminder is sent only within 30 days of the due date.
- for a repeating training, once after each due date a person missed, unless they have already completed the next cycle. This reminder is also sent only within 30 days of the due date.
| Cycle length | First reminder |
|---|---|
| 300 days or more (yearly) | 30 days before |
| 150 days or more (half-yearly) | 14 days before |
| 60 days or more (quarterly) | 7 days before |
| Shorter (monthly) | 3 days before |
| One-off | 7 days before |
A person who has completed the current cycle gets no more reminders for it. No reminder is sent twice for the same cycle. Reminders that are due together arrive in one email. Training reminders do not depend on marketing email settings.
People who work in the app see reminders in their notification inbox. They get emails once they turn email on under Account → Notifications. People who use only the portal turn on Email notifications on their portal profile.
Who is in the audience
A person whose membership is deactivated leaves every audience. A person reached only through an archived role leaves it too. When you archive a role in People → Roles, the confirmation shows how many people and assignments it affects.
Permissions
| Role | Trainings | Assignment and completions | Competence matrix |
|---|---|---|---|
| Owner, admin | Create, edit, archive, delete, upload the PDF | Assign, remove people, record completions for others | Read and export |
| Auditor | Read | Read, with notes and evidence references | Read and export |
| Member | Read | Read statuses. Notes and evidence references are hidden. | No |
| Organization token | List, create, edit, archive, restore, delete over the API | None | No |
| Employee | Own assigned trainings, in the portal | Complete own trainings | No |
Owners, admins and members can comment on a training. Auditors can read comments but not write them.
Limits
The Free plan allows 2 trainings. Archived trainings do not count. Restoring a training checks the limit again. The Business plan has no limit.
Where trainings appear
- Dashboard: the Policies card shows Trainings overdue, the number of trainings with at least one overdue person. It links to People, filtered to those people.
- Deadlines: each open cycle, tagged
TRAINING, with "x of y completed". - People: the Policies & Trainings tab of each person lists what is assigned to them and the status.
- Search: find trainings by title in the command palette.
- Portal: each assigned person sees their trainings and due dates.
- Tabs on the training: Evidence links evidence records, such as an attendance list, or creates one from a dropped file. Tasks holds follow-up work. Comments holds the discussion. History shows who changed what and when.
API
- Base URL:
https://app.devguard.ch/api. - Authentication: an API token, which acts with your own role, or an organization token. Send it as
Authorization: Bearer <token>, and send JSON withContent-Type: application/json. - Scope: the API covers trainings. Assignments, completions, the competence matrix and PDF upload are in the app only.
| Call | Endpoint | Organization id |
|---|---|---|
| List | GET /trainings/ | query, required |
| Create | POST /trainings/ | body, required |
| Update | PATCH /trainings/{id}/ | not used |
| Archive | POST /trainings/{id}/archive/ | not used |
| Restore | POST /trainings/{id}/restore/ | not used |
| Delete | DELETE /trainings/{id}/ | not used |
Calls with {id} need no organizationId. The list returns { "items": [...], "total": 4, "page": 1, "limit": 100 }. It returns active trainings unless you send filterByArchived=archived. limit is 5 to 100. PATCH needs title and source on every call, even if they do not change.
Create a link training:
curl -X POST https://app.devguard.ch/api/trainings/ \
-H "Authorization: Bearer $DG_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"organizationId": "<org id>",
"title": "Clean desk and screen lock",
"source": "LINK",
"sourceUrl": "https://learn.example.com/clean-desk",
"durationMinutes": 15
}'The answer is the new training:
{
"id": "36e219e5-0fa3-47fd-9fda-92aa3e01320b",
"title": "Clean desk and screen lock",
"slug": "clean-desk-and-screen-lock",
"description": null,
"source": "LINK",
"sourceUrl": "https://learn.example.com/clean-desk",
"durationMinutes": 15,
"ownerId": null,
"organizationId": "<org id>",
"createdAt": "2026-10-30T09:12:44.120Z",
"updatedAt": "2026-10-30T09:12:44.120Z",
"archivedAt": null
}The slug is made from the title. If another training, archived or not, already has that slug, devguard adds -2, -3 and so on.
Errors return { "message": ..., "code": ..., "status": ... }. A 400 for an invalid field also has issues, which lists the fields.
| Status | When | message |
|---|---|---|
| 400 | A field is invalid, for example no sourceUrl for a source other than PDF. Also a list page after the last one. | The reason |
| 401 | The token is missing or not valid. | |
| 403 | The plan limit is reached (create or restore). | LIMIT_REACHED:trainings |
| 403 | The token has no access to the organization, or the id belongs to another organization. | |
| 404 | The id does not exist. |
How is this guide?