Salons
Public GET endpoints are available without authentication.
Create/update/delete — only for the salon owner (salons.owner_id == current_user.id) or admin.
List Salons
GET /api/v1/salons
Search and list salons.
Query params
| Parameter | Description |
|---|---|
query | Search by name / address |
category | Category slug |
price_min | Minimum price |
price_max | Maximum price |
rating_min | Minimum rating |
Response 200
{
"success": true,
"status": "200",
"message": "Salons retrieved successfully",
"errors": null,
"data": [
{
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": []
}
]
}
Get Salon
GET /api/v1/salons/:id
Detailed information about a salon. Includes schedule, services, and cancellation policy.
Response 200
{
"success": true,
"status": "200",
"message": "Salon retrieved successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
"address": "str. Pushkin 12",
"lat": 47.024,
"lng": 28.832,
"phone": "+37369000000",
"status": "active",
"avg_rating": 4.8,
"reviews_count": 12,
"photo_urls": [],
"cancellation_hours_before": 24,
"cancellation_fee_percent": "0.0",
"working_hours": [
{ "day_of_week": 1, "open": "09:00", "close": "18:00" },
{ "day_of_week": 2, "open": "09:00", "close": "18:00" }
],
"services": [
{
"id": "uuid",
"name": "Men's Haircut",
"category": "barbershop",
"duration_min": 30,
"price_from": 150.0
}
]
}
}
Create Salon
POST /api/v1/salons
Create a new salon. Requires authentication (owner or admin).
Request
POST /api/v1/salons
Authorization: Bearer <token>
Content-Type: application/json
{
"salon": {
"name": "Barber House",
"address": "str. Pushkin 12",
"phone": "+37369000000",
"lat": 47.024,
"lng": 28.832,
"status": "pending"
}
}
You can also pass photos[] as multipart.
Response 201
{
"success": true,
"status": "201",
"message": "Salon created successfully",
"errors": null,
"data": {
"id": "uuid",
"name": "Barber House",
"slug": "barber-house",
...
}
}
Update Salon
PATCH /api/v1/salons/:id
Update a salon. Only the owner (owner_id) or admin.
Request
{
"salon": {
"name": "New Name",
"address": "New Address",
"status": "active"
}
}
Response 200
Same body as POST /api/v1/salons with updated data.
Delete Salon
DELETE /api/v1/salons/:id
Delete a salon. Only the owner or admin.
Response 200
{
"success": true,
"status": "200",
"message": "Salon deleted successfully",
"errors": null,
"data": null
}
Add to Favorites
POST /api/v1/salons/:id/favorites
Add salon to favorites. Requires authentication.
Response 201
{
"success": true,
"status": "201",
"message": "...",
"errors": null,
"data": null
}
Remove from Favorites
DELETE /api/v1/salons/:id/favorites
Remove salon from favorites. Requires authentication.
Response 200
{
"success": true,
"status": "200",
"message": "...",
"errors": null,
"data": null
}