RAID API
  1. Public
  • 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 certification quiz result
        • Get certification exam result
        • Get certification skills
        • List diver certifications
      • 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
      • Get country data
        GET
      • Get country divisions (states/provinces)
        GET
      • List time zone identifiers, optionally narrowed to one country
        GET
      • List, search, and radius-search publicly visible dive centres
        GET
      • Every publicly visible, geolocated dive centre as a map marker
        GET
      • Countries with at least one publicly visible dive centre
        GET
      • Full detail of one publicly visible dive centre
        GET
  • 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. Public

Full detail of one publicly visible dive centre

GET
https://test.diveraid.com/api/v1/public/dive-centers/{raid_id}
Public
Maintainer:Not configured

Overview#

Full detail of one publicly visible dive centre: address, contact channels, socials, the manager's name, and an instructor count. Replaces POST /api/v1/utility/dive-center, now resolved by raid_id in the path (not id in the body) and restricted to publicly visible centres only.
Controller: App\Http\Controllers\Api\V1\Public\DiveCenterController::show()
Route name: api.v1.public.dive-centers.show

Authentication#

Type: None (public endpoint)
Additional middleware: throttle:public. See docs/api/README.md §14.

Request#

Method: GET
Path: /api/v1/public/dive-centers/{raid_id}

Path parameters#

ParameterTypeDescription
{raid_id}stringThe centre's RAID id (not its numeric id). Resolved only among publicly visible centres - a hidden centre's raid_id answers 404, identical to an unknown one
map and countries are declared as their own routes ahead of this one, so those two path segments are never captured here.

Example request#


Response 200 OK#

Captured live. Personal and contact values below are placeholders (manager_name, address, email, phone, mobile, website, socials, logo) - the local database holds a real person's and a real business's actual contact details. name, raid_id, city, state, postal_code, location and instructor_count are captured as-is.
{
  "success": true,
  "status": "success",
  "message": "OK",
  "data": {
    "id": 267,
    "raid_id": "DCIT15-297-196",
    "name": "OLOTURIA SUB",
    "country": { "value": "IT", "label": "Italy" },
    "city": "MESSINA",
    "logo": "https://example.com/dive_centers/logo.webp",
    "location": { "lat": 38.229281740546, "lng": 15.569799819653 },
    "state": "Messina",
    "address": "Via Example 1",
    "postal_code": "98168",
    "email": "info@example.com",
    "phone": "+44 20 0000 0000",
    "mobile": "+44 20 0000 0000",
    "website": "https://example.com",
    "socials": {
      "facebook": "https://example.com/facebook",
      "instagram": "https://example.com/instagram"
    },
    "manager_name": "Jane Doe",
    "instructor_count": 2
  }
}

Response fields#

FieldTypeNullableAlways presentDescription
data.idintegerNoYesNumeric primary key - what RegisterRequest::dive_center and UpdateDiveCenterRequest::dive_center_id take
data.raid_idstringNoYesSame value as the path parameter
data.namestringNoYes
data.countryobjectNoYes{value, label}
data.citystringYesYes
data.logostringYesYesnull when no logo is uploaded
data.locationobjectYesYes{lat, lng} floats, or null under the same coordinate-validity rule as the list endpoint
data.statestringYesYes
data.addressstringYesYes
data.postal_codestringYesYes
data.emailstringNoYesThe email_address accessor: falls back from email_service to email
data.phonestringYesYes
data.mobilestringYesYes
data.websitestringYesYes
data.socialsobjectNoYesKeyed by social network name (facebook, instagram, x, ...); empty object when the centre has none
data.manager_namestringYesYesThe manager's full_name and nothing else about that user - no id, email, phone, username or qualification appears anywhere in this response
data.instructor_countintegerNoYesConfirmed staff (dive_center_staff.status = true) whose qualification cast is instructor, trainer, examiner, itt, or tec_examiner - narrower than "all confirmed staff"

Errors#

404 Not Found#

Both an unknown raid_id and a hidden centre's real raid_id (inactive, or expired more than a year) answer identically - the lookup never reveals which case it is.
{
  "success": false,
  "status": "error",
  "message": "Dive center not found"
}

429 Too Many Requests#

Behind the dedicated public limiter (300 requests per minute, keyed by IP). No errors key.
{
  "success": false,
  "status": "error",
  "message": "Too many requests"
}

Notes#

This endpoint publishes personal data with no authentication: manager_name is a real person's full name, served to any caller with no token at all. This is a deliberate trade-off for a public directory feature - see docs/api/README.md §14. No other field about the manager is exposed.
instructor_count is computed via withCount() in the query - the manager and staff users themselves are never loaded into the response.
Replaces POST /api/v1/utility/dive-center (removed; see docs/api/_archive/utility/POST_dive_center.md), which took the numeric id in the body, had no visibility restriction, and carried no manager_name, instructor_count, socials, state, address or postal_code.

Request

Path Params

Responses

🟢200
application/json
Success
Bodyapplication/json

🟠404
🟠429
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://test.diveraid.com/api/v1/public/dive-centers/'
Response Response Example
200 - Example 1
{
    "status": "success",
    "message": "string",
    "data": {
        "id": 0,
        "raid_id": "string",
        "name": "string",
        "country": {
            "value": "IT",
            "label": "Italy"
        },
        "city": "string",
        "logo": "string",
        "location": {},
        "state": "string",
        "address": "string",
        "postal_code": "string",
        "email": "string",
        "phone": "string",
        "mobile": "string",
        "website": "string",
        "socials": {},
        "manager_name": "string",
        "instructor_count": 0
    }
}
Modified at 2026-09-25 16:28:09
Previous
Countries with at least one publicly visible dive centre
Next
DiverSearch
Built with