RAID API
  1. Certifications
  • DiveRAID frontend public API
    • Search divers
      POST
    • Search instructors
      POST
    • Search dive centers
      POST
    • Search dive centers by country
      GET
  • DiveRAID rest API V1
    • Auth
      • Register a new user
      • Login and get a Sanctum token
      • Send password reset email
      • Reset password using token
      • Logout and revoke the current token
      • Resend email verification
    • Profile
      • Get authenticated user profile
      • Update profile
      • Delete account
      • Update password
      • Update dive center association
    • Diver
      • Courses
        • List active courses
        • List expired courses
        • Get course detail
        • Submit module quiz
        • Get quiz result
        • Submit course exam
        • Get exam result
        • Get skills progress
        • Sign skills (diver)
      • Free Learnings
        • List enrolled free learnings
        • List available free learning courses
        • Enroll in a free learning course
        • Get free learning detail
        • Submit free learning module quiz
        • Get free learning quiz result
      • Certifications
        • Get certification history
          GET
        • Get certification quiz result
          GET
        • Get certification exam result
          GET
        • Get certification skills
          GET
        • List diver certifications
          GET
      • Dive Logs
        • List dive logs (paginated)
        • Create dive log
        • Get dive log
        • Update dive log
      • Awards
        • List award cards
      • Documents
        • List diver documents
      • Forms
        • List diver forms
      • Medical
        • Get medical questionnaire structure
        • Submit medical questionnaire
      • Store
        • List courses available for purchase
        • Get order status
    • Professional
      • Students
        • List students
        • Get student progress
        • Get student quiz result
        • Get student exam result
        • Get student skills progress
        • Sign student skills
      • Certifications
        • List all professional certifications
        • List diver-level certifications
        • List specialty certifications
        • List professional certifications
        • List trainer certifications
        • List examiner certifications
        • Get certification history
        • Get certification quiz result
        • Get certification exam result
        • Get certification skills
      • Classroom
        • List classrooms
        • Get classroom progress (all students)
        • Get classroom student progress
        • Get classroom student quiz result
        • Get classroom student exam result
        • Get classroom student skills
        • Sign classroom student skills
      • Renewals
        • List renewal courses
        • Get renewal progress
        • Submit renewal module quiz
        • Get renewal quiz result
        • Submit renewal exam
        • Get renewal exam result
        • Get renewal skills progress
        • Sign renewal skills
      • Recognitions
        • List recognition courses
      • Dive Logs
        • List student dive logs for a course
        • Get student dive log
        • Sign student dive log
      • Store
    • Sync
      • Get sync status
      • Download full course data for offline use
      • Upload offline operations
    • Dive Center
    • Public
      • List all countries
      • Get country data
      • Get country divisions (states/provinces)
      • List time zone identifiers, optionally narrowed to one country
      • List, search, and radius-search publicly visible dive centres
      • Every publicly visible, geolocated dive centre as a map marker
      • Countries with at least one publicly visible dive centre
      • Full detail of one publicly visible dive centre
  • Schemas
    • Frontend API Schema
      • DiverSearch
    • SuccessResponse
    • ValidationErrorResponse
    • TokenResponse
    • ErrorResponse
    • UserProfile
    • CourseLog
    • CourseLogDetail
    • QuizResult
    • ExamResult
    • SkillProgress
    • DiveLog
    • Certification
    • PaginatedDiveLogs
    • StoreItem
    • PaymentIntentResponse
    • OrderConfirmResponse
    • OrderStatusResponse
    • InstructorSearch
    • DiveCenterSearch
  1. Certifications

Get certification history

GET
https://test.diveraid.com/api/v1/diver/certifications/{log_code}/history
Diver/Certifications
Maintainer:Not configured

Overview#

Returns the full training history for a certification log_code: every certification recorded under it, every quiz attempt, every exam attempt, and every skill progress entry. Served by CertificationController::history().
{log_code} is a plain string, not route-model-bound: the controller queries Certification::where('log_code', $log_code). A log_code no certification carries returns 404. Ownership is checked against the resolved set: if none of the certifications with that log_code belong to auth()->id(), 403.
A log_code carries more than one certification when the diver has leveled up — one certification per level reached, all sharing the same log_code. Quizzes, exams and skill logs are not level-scoped: they are shared across every level of the log_code (skills are also incremental, not repeated per level), which is why they stay flat arrays while certifications is the one field that can hold more than one row.
Controller: App\Http\Controllers\Api\V1\Diver\CertificationController::history()
Route name: api.v1.diver.certifications.history

Authentication#

Type: Bearer Token
Header: Authorization: Bearer {token}

Request#

Method: GET
Path: /api/v1/diver/certifications/{log_code}/history

Path parameters#

ParameterTypeDescription
{log_code}string(32)Certification log code, as returned by GET /api/v1/diver/certifications

Example request#


Response 200 OK#

Captured live: a log_code with 1 certification, 9 quizzes, 1 exam and 2 skill logs recorded. Abbreviated to 1 question per quiz/exam and 1 skill per skill log.
{
  "success": true,
  "status": "success",
  "message": "OK",
  "data": {
    "certifications": [
      {
        "resource": "Certification",
        "data": {
          "log_code": "339ff871bc19fdc146b7194b1b29f93a",
          "course": "Divemaster Instructor",
          "course_level": "Example Level 1",
          "distributor": "Example Distributor",
          "dive_center": "Example Dive Center",
          "instructor": "Example Instructor",
          "order_id": null,
          "is_associated": false,
          "associated_log": null,
          "is_renewed": 0,
          "will_expire": false,
          "expire_date": null,
          "is_crossover": false,
          "leveling_up": false,
          "leveling_up_from": null,
          "leveling_id": null,
          "is_upgrade": false,
          "upgrade_course": null,
          "previous_certification": null
        }
      },
      {
        "resource": "Certification",
        "data": {
          "log_code": "339ff871bc19fdc146b7194b1b29f93a",
          "course": "Divemaster Instructor",
          "course_level": "Example Level 2",
          "distributor": "Example Distributor",
          "dive_center": "Example Dive Center",
          "instructor": "Example Instructor",
          "order_id": null,
          "is_associated": false,
          "associated_log": null,
          "is_renewed": 0,
          "will_expire": false,
          "expire_date": null,
          "is_crossover": false,
          "leveling_up": false,
          "leveling_up_from": null,
          "leveling_id": null,
          "is_upgrade": false,
          "upgrade_course": null,
          "previous_certification": "Example Level 1 certification"
        }
      }
    ],
    "quizzes": [
      {
        "id": 324380,
        "log_code": "339ff871bc19fdc146b7194b1b29f93a",
        "module_id": 391,
        "total": 5,
        "correct": 4,
        "wrong": 1,
        "score": 80,
        "passed": true,
        "date": "2017-08-07",
        "start": "2017-08-07 02:30:33",
        "end": "2017-08-07 02:34:37",
        "questions": [
          {
            "id": 6887,
            "text": "Example quiz question",
            "answers": [
              { "id": 20101, "text": "Example wrong answer", "is_correct": false, "selected": false },
              { "id": 20102, "text": "Example right answer", "is_correct": true, "selected": true }
            ]
          }
        ]
      }
    ],
    "exams": [
      {
        "id": 41827,
        "log_code": "339ff871bc19fdc146b7194b1b29f93a",
        "total": 20,
        "correct": 19,
        "wrong": 1,
        "score": 95,
        "passed": true,
        "date": "2017-08-07",
        "start": "2017-08-07 14:59:13",
        "end": "2017-08-07 15:17:24",
        "questions": [
          {
            "id": 6864,
            "text": "Example exam question",
            "answers": [
              { "id": 30201, "text": "Example wrong answer", "is_correct": false, "selected": true },
              { "id": 30202, "text": "Example right answer", "is_correct": true, "selected": false }
            ]
          }
        ]
      }
    ],
    "skills": [
      {
        "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
          }
        ]
      }
    ]
  }
}

Response fields#

FieldTypeNullableNotes
certificationsarrayNoCertificationResource collection, _resources.md → "Certification". One entry per level the diver reached under this log_code, ordered by the level's sort then by certification_date
quizzesarrayNoQuizResultResource collection, _resources.md → "Quiz result"
examsarrayNoExamResultResource collection, _resources.md → "Exam result"
skillsarrayNoSkillProgressResource collection, _resources.md → "Skill progress entry". [] when the log_code has no skill log records, populated otherwise

Errors#

401 Unauthorized#

{
  "success": false,
  "status": "error",
  "message": "Unauthenticated"
}

403 Forbidden#

Captured live, against a log_code belonging to a different user.
{
  "success": false,
  "status": "error",
  "message": "Forbidden"
}

404 Not Found#

Captured live, against a log_code no certification carries. Standard envelope, unlike the earlier primary-key version of this route.
{
  "success": false,
  "status": "error",
  "message": "Resource not found"
}

Notes#

Read-only, no side effects.
A log_code carries one certification per level reached: quizzes and exams are shared across levels, the skills are incremental and signed per level, and a level-up reopens the same log_code and issues a new certification. certifications is therefore ordered by the level's sort, then by certification_date. The example shows two levels; the capture behind it held a single certification, which is the common case.
Every question under quizzes and exams carries its full answers array, and each answer exposes is_correct alongside selected. The endpoint therefore reveals the correct answer of every quiz and exam question the diver has taken, captured 2026-09-23.
The 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: the skills key above is populated live for a log_code that has skill log records, captured 2026-09-23.

Request

Authorization
JWT Bearer
Add the parameter
Authorization
to Headers
Example:
Authorization: ********************
or
Path Params

Responses

🟢200
application/json
Success
Bodyapplication/json

🟠401
🟠403
🟠404
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://test.diveraid.com/api/v1/diver/certifications//history' \
--header 'Authorization: Bearer <token>'
Response Response Example
200 - Example 1
{
    "status": "success",
    "message": "string",
    "data": {
        "log_code": "string",
        "course": "string",
        "quizzes": [
            {
                "id": 0,
                "log_code": "string",
                "module_id": 0,
                "total": 0,
                "correct": 0,
                "wrong": 0,
                "score": 0,
                "passed": true,
                "date": "2019-08-24",
                "start": "2019-08-24T14:15:22.123Z",
                "end": "2019-08-24T14:15:22.123Z",
                "questions": [
                    {
                        "id": 0,
                        "text": "string",
                        "answers": [
                            {
                                "id": 0,
                                "text": "string",
                                "is_correct": true,
                                "selected": true
                            }
                        ]
                    }
                ]
            }
        ],
        "exams": [
            {
                "id": 0,
                "log_code": "string",
                "total": 0,
                "correct": 0,
                "wrong": 0,
                "score": 0,
                "passed": true,
                "date": "2019-08-24",
                "start": "2019-08-24T14:15:22.123Z",
                "end": "2019-08-24T14:15:22.123Z",
                "questions": [
                    {
                        "id": 0,
                        "text": "string",
                        "answers": [
                            {
                                "id": 0,
                                "text": "string",
                                "is_correct": true,
                                "selected": true
                            }
                        ]
                    }
                ]
            }
        ],
        "skills": [
            {
                "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
                    }
                ]
            }
        ]
    }
}
Modified at 2026-09-25 16:27:47
Previous
Get free learning quiz result
Next
Get certification quiz result
Built with