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.App\Http\Controllers\Api\V1\Public\DiveCenterController::show()api.v1.public.dive-centers.showthrottle:public. See docs/api/README.md §14.GET/api/v1/public/dive-centers/{raid_id}| Parameter | Type | Description |
|---|---|---|
{raid_id} | string | The 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.200 OKmanager_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
}
}| Field | Type | Nullable | Always present | Description |
|---|---|---|---|---|
data.id | integer | No | Yes | Numeric primary key - what RegisterRequest::dive_center and UpdateDiveCenterRequest::dive_center_id take |
data.raid_id | string | No | Yes | Same value as the path parameter |
data.name | string | No | Yes | |
data.country | object | No | Yes | {value, label} |
data.city | string | Yes | Yes | |
data.logo | string | Yes | Yes | null when no logo is uploaded |
data.location | object | Yes | Yes | {lat, lng} floats, or null under the same coordinate-validity rule as the list endpoint |
data.state | string | Yes | Yes | |
data.address | string | Yes | Yes | |
data.postal_code | string | Yes | Yes | |
data.email | string | No | Yes | The email_address accessor: falls back from email_service to email |
data.phone | string | Yes | Yes | |
data.mobile | string | Yes | Yes | |
data.website | string | Yes | Yes | |
data.socials | object | No | Yes | Keyed by social network name (facebook, instagram, x, ...); empty object when the centre has none |
data.manager_name | string | Yes | Yes | The manager's full_name and nothing else about that user - no id, email, phone, username or qualification appears anywhere in this response |
data.instructor_count | integer | No | Yes | Confirmed staff (dive_center_staff.status = true) whose qualification cast is instructor, trainer, examiner, itt, or tec_examiner - narrower than "all confirmed staff" |
404 Not Foundraid_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 Requestspublic limiter (300 requests per minute, keyed by IP). No errors key.{
"success": false,
"status": "error",
"message": "Too many requests"
}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.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.curl --location 'https://test.diveraid.com/api/v1/public/dive-centers/'{
"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
}
}