log_code. Served by CertificationController::historySkills(). Same shape and mechanics as docs/api/diver/courses/GET_skills.md, and the same underlying bug.{log_code} is a plain string, not route-model-bound. A log_code no certification carries returns 404. Ownership is checked against the resolved set of certifications for that log_code: none belonging to auth()->id() returns 403.App\Http\Controllers\Api\V1\Diver\CertificationController::historySkills()api.v1.diver.certifications.history.skillsAuthorization: Bearer {token}GET/api/v1/diver/certifications/{log_code}/skills| Parameter | Type | Description |
|---|---|---|
{log_code} | string(32) | Certification log code, as returned by GET /api/v1/diver/certifications |
200 OKlog_code with 2 skill log records. Abbreviated to 1 skill per skill log.{
"success": true,
"status": "success",
"message": "OK",
"data": [
{
"id": 8123,
"log_code": "339ff871bc19fdc146b7194b1b29f93a",
"skill_type_id": 1,
"skill_type_name": "Confined Water or Pool",
"user_completed": [22, 0, 22, 100, 1],
"start": "2018-03-11 09:12:04",
"end": "2018-03-11 09:41:55",
"skills": [
{
"id": 471,
"name": "Example skill",
"description": "<p>Example skill description.</p>",
"diver_signed": true,
"instructor_signed": true
}
]
}
]
}data comes back [] for a log_code with no skill log records._resources.md → "Skill progress entry" for the full field shape.401 Unauthorized{
"success": false,
"status": "error",
"message": "Unauthenticated"
}403 Forbidden{
"success": false,
"status": "error",
"message": "Forbidden"
}404 Not Found{log_code} does not resolve to any certification.{
"success": false,
"status": "error",
"message": "Resource not found"
}docs/api/diver/courses/GET_skills.md for the sibling endpoint hitting the identical bug.Call to undefined relationship [skills] on model [App\Models\Skills\SkillType] crash documented until 23c8454ad (finding 2 of docs/plans/ApiDocsDiver/findings.md) is fixed: data above is populated live for a log_code that has skill log records, captured 2026-09-23.curl --location 'https://test.diveraid.com/api/v1/diver/certifications//skills' \
--header 'Authorization: Bearer <token>'{
"status": "success",
"message": "string",
"data": [
{
"id": 0,
"log_code": "string",
"skill_type_id": 0,
"skill_type_name": "string",
"user_completed": true,
"start": "2019-08-24T14:15:22.123Z",
"end": "2019-08-24T14:15:22.123Z",
"skills": [
{
"id": 0,
"name": "string",
"description": "string",
"diver_signed": true,
"instructor_signed": true
}
]
}
]
}