Skip to main content

Training Program Participants

Participants belong to exactly one training program, and each training program can have many participants. This API allows you to create, retrieve, and delete participants for a specific training program.


Endpoints

MethodPathPurpose
GET/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participantsRetrieve participants for a training program
POST/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participantsCreate participants in bulk
DELETE/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants/{id}Delete a single participant
Authentication

Include the following headers on every request:

  • Authorization: HMAC <signature>
  • X-Api-Key: <your account key>
  • Accept: application/json

See Authentication.


Attributes

FieldTypeRequiredDescription
full_namestringyesParticipant full name.
genderstringyesAccepted values: Male, Female.
disabledbooleanyesIndicates a disability.
foreignbooleanyesIndicates a foreign national.
racestringyesAccepted values: African, Coloured, Indian, White.
id_numberstringconditionalParticipant ID number. Required when the scorecard enforces compulsory ID numbers.
office_basedbooleannoIndicates office-based training.
ageintegernoParticipant age.
provincestringnoParticipant province.
business_unitstringnoBusiness unit.
employee_codestringnoEmployee code.
employedbooleannoIndicates employment status.
completedbooleannoIndicates course completion.
absorbedbooleannoIndicates absorption status.
course_costnumbernoCourse cost.
travel_costnumbernoTravel cost.
catering_costnumbernoCatering cost.
stationery_costnumbernoStationery cost.
training_facility_costnumbernoTraining facility cost.
salary_costnumbernoSalary cost.
other_costsnumbernoOther costs.
start_datestring | nullnoStart date (YYYY-MM-DD).
end_datestring | nullnoEnd date (YYYY-MM-DD).
accommodation_costnumbernoAccommodation cost.
custom_datastringnoCustom data payload.
man_hoursnumbernoMan hours.
driverbooleannoIndicates driver training.
starting_employment_statusstringnoEmployment status at start of training. Must be: Permanent, Fixed-Term, or Unemployed.
yes_employeebooleannoIndicates YES employee status.
absorption_datestring | nullnoAbsorption date (YYYY-MM-DD).
legal_attorney_statusstring | nullconditionalLegal attorney status. Required for Legal Attorneys charter scorecards.
admission_as_legal_practitionerbooleannoIndicates admission as legal practitioner.

System Fields (Response Only)

FieldTypeDescription
idintegerInternal identifier for the participant.
created_atdatetimeRecord creation timestamp.
updated_atdatetimeRecord update timestamp.

Notes

  • Dates must be in ISO 8601 format (YYYY-MM-DD).
  • Cost fields are returned as strings in responses (e.g. "5000.0") but can be sent as numbers in requests.
  • After creating or deleting participants, recalculate the scorecard to refresh totals.

List participants

Returns a paginated list of participants for a single training program.

GET /api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants

Path parameters

NameTypeRequiredDescription
scorecard_idstringyesThe scorecard identifier.
training_program_idintegeryesTraining program ID.

Query parameters

NameTypeRequiredDescription
pageintegernoPage number (min 1, max 100000). Default is 1.
per_pageintegernoPage size (min 1, max 1000). Default is 50.

Code examples

curl -X GET "https://www.beetoolkit.co.za/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants?page=1&per_page=50" \
-H "Accept: application/json" \
-H "X-Api-Key: <your account key>" \
-H "Authorization: HMAC <your signature>"

Response

Returns a JSON object with data and meta keys.

{
"data": [
{
"id": 32047,
"full_name": "Test",
"gender": "Male",
"disabled": false,
"foreign": false,
"race": "Indian",
"id_number": "",
"office_based": false,
"age": 0,
"province": "Gauteng",
"business_unit": "",
"employee_code": "",
"employed": true,
"completed": true,
"absorbed": false,
"designated_group": false,
"course_cost": "10.0",
"travel_cost": "20.0",
"catering_cost": "40.0",
"stationery_cost": "0.0",
"training_facility_cost": "0.0",
"salary_cost": "220.0",
"other_costs": "0.0",
"start_date": null,
"end_date": null,
"accommodation_cost": "0.0",
"custom_data": "",
"man_hours": "0.0",
"driver": false,
"starting_employment_status": "Permanent",
"yes_employee": false,
"absorption_date": null,
"legal_attorney_status": null,
"admission_as_legal_practitioner": false,
"created_at": "2026-02-16T06:46:56.000Z",
"updated_at": "2026-02-16T06:46:56.000Z"
}
],
"meta": {
"prev_url": null,
"next_url": null,
"count": 1,
"page": 1,
"items": 50,
"pages": 1
}
}

Create participants (bulk)

Insert multiple participants at once via a batch payload.

POST /api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants

Path parameters

NameTypeRequiredDescription
scorecard_idstringyesThe scorecard identifier.
training_program_idintegeryesTraining program ID.

Request body

Send a JSON object with a participants array:

{
"participants": [
{
"full_name": "John Doe",
"race": "African",
"gender": "Male",
"course_cost": 5000
}
]
}

Code examples

curl -X POST "https://www.beetoolkit.co.za/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Api-Key: <your account key>" \
-H "Authorization: HMAC <your signature>" \
-d '{
"participants": [
{
"full_name": "John Doe",
"race": "African",
"gender": "Male",
"course_cost": 5000
}
]
}'

Response

On success, the API returns an array containing the created participants.

[
{
"id": 32050,
"full_name": "John Doe",
"gender": "Male",
"disabled": false,
"foreign": false,
"race": "African",
"id_number": null,
"office_based": false,
"age": 0,
"province": null,
"business_unit": null,
"employee_code": null,
"employed": true,
"completed": false,
"absorbed": false,
"course_cost": "5000.0",
"travel_cost": "0.0",
"catering_cost": "0.0",
"stationery_cost": "0.0",
"training_facility_cost": "0.0",
"salary_cost": "0.0",
"other_costs": "0.0",
"start_date": null,
"end_date": null,
"accommodation_cost": "0.0",
"custom_data": null,
"man_hours": "0.0",
"driver": false,
"starting_employment_status": "Permanent",
"yes_employee": false,
"absorption_date": null,
"legal_attorney_status": null,
"admission_as_legal_practitioner": false,
"created_at": "2026-02-17T07:17:42.000Z",
"updated_at": "2026-02-17T07:17:42.000Z"
}
]
Recalculate after loading participants

After creating participants, call the scorecard recalculate endpoint to refresh scores: Recalculate a scorecard.

Errors

StatusDescription
422One or more participant records are invalid.
{
"error": {
"message": "One or more participant records are invalid.",
"invalid_records": [
{
"id": null,
"full_name": "John Doe",
"gender": "Malee",
"race": "African",
"errors": [
"Gender is not included in the list"
]
}
]
}
}

Delete a participant

Deletes a single participant by ID within the specified training program.

DELETE /api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants/{id}

Path parameters

NameTypeRequiredDescription
scorecard_idstringyesThe scorecard identifier.
training_program_idintegeryesTraining program ID.
idintegeryesParticipant ID.

Code examples

curl -X DELETE "https://www.beetoolkit.co.za/api/public/v1/scorecards/{scorecard_id}/training_programs/{training_program_id}/participants/{id}" \
-H "Accept: application/json" \
-H "X-Api-Key: <your account key>" \
-H "Authorization: HMAC <your signature>"

Response

Returns 204 No Content on success.

Recalculate after deleting participants

After deleting participants, call the scorecard recalculate endpoint to refresh scores: Recalculate a scorecard.