Skip to main content

Get Training List (Online + Offline)

Written by Support

GET [ training ]

Production Endpoint: https://app.complyflow.com.au/app/public/index.php/api/v1/training
Test Endpoint: https://test.complyflow.com.au/app/public/index.php/api/v1/training

Overview

This endpoint returns unified training records (online courses + offline sessions) for the current organisation. It returns session-level data — use this endpoint for browsing sessions and building dashboards/reports.

Authentication instructions

Refer to the Authentication method for Authentication Methods (for Login and Logout).

Permissions Required

The user requires the permissions below:

  • API User

  • User is Staff

  • Users have View Training Permission

Please also refer to the Permissions Overview guide.

Query parameters

FIELD

TYPE

DESCRIPTION

EXAMPLE

REQUIRED

DEFAULT

PATTERN

type

string

Filter by training type

offline

No

all

all | online | offline

status

string

Filter by status. Note: upcoming returns confirmed only on this endpoint (not proposed)

completed

No

null

proposed | confirmed | completed | cancelled | upcoming

project_id

integer

Filter by project/site ID

10

No

null

\d+

label_id

integer

Filter by training label ID

5

No

null

\d+

person_id

integer

Filter by person (staff or worker) ID

123

No

null

\d+

entity_type

string

Filter by entity

staff

No

null

staff | employee

date_from

string

Start date filter

2025-01-01

No

null

YYYY-MM-DD

date_to

string

End date filter. Must be >= date_from

2025-06-30

No

null

YYYY-MM-DD

page

integer

Page number

1

No

1

min: 1

per_page

integer

Records per page

25

No

50

min: 1, max: 100

Request Example

curl --location 'https://test.complyflow.com.au/app/public/index.php/api/v1/training?type=offline&status=completed&project_id=10&date_from=2025-01-01&page=1&per_page=25' \
--header 'Authorization: Bearer [...]'

Response Example

The API request returns a paginated list of training records (online + offline) for the current organisation. The response is wrapped in a token / data envelope.

{
"token": "refreshed-jwt-token",
"data": {
"data": [
{
"id": "S1234",
"type": "offline",
"name": "Site Induction Training",
"description": "Mandatory safety induction for all new workers",
"status": "completed",
"date": "2025-06-15",
"venue": "Training Room A, Level 2",
"total_seats": 30,
"occupied_seats": 28,
"self_register": true,
"projects": ["Melbourne Rail Hub"],
"courses": ["WHS Induction", "Emergency Procedures"],
"labels": ["Safety", "Mandatory"]
},
{
"id": "C5678",
"type": "online",
"name": "Fire Safety Awareness",
"description": "Online fire safety training module",
"status": "completed",
"date": "2025-06-10",
"expiry_date": "2026-06-10",
"staff_id": null,
"employee_id": 456,
"projects": [],
"courses": [],
"labels": []
}
],
"pagination": {
"current_page": 1,
"per_page": 25,
"total": 142,
"has_more": true
}
}
}

Note: The token field is the refreshed JWT and is null for worker profiles. The offline date field is the latest session day. Online records use completed / expired for status.

Error Responses

HTTP Code

Scenario

Body

401

Missing or invalid JWT token

{"error": "token_not_provided"} or {"error": "token_invalid"}

422

Validation error (e.g. invalid date format)

{"type": ["The selected type is invalid."]}

Did this answer your question?