POST /v1/coaches/\{coachId\}/bookings
Service: booking · operationId: (none)
Required scopes
(no scope declared — review service config)
Path parameters
coachId(string) required —
Request body
{
"type": "object",
"properties": {
"slot_at": {
"type": "string",
"format": "date-time"
},
"notes": {
"type": "string"
}
},
"required": [
"slot_at"
]
}Responses
201 Office-hour booking created
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"office_hour_id": {
"type": "string"
},
"patient_id": {
"type": "string"
},
"slot_at": {
"type": "string",
"format": "date-time"
},
"duration_minutes": {
"type": "number"
},
"status": {
"type": "string"
},
"notes": {
"type": [
"string",
"null"
]
},
"created_at": {
"type": "string"
}
},
"required": [
"id",
"office_hour_id",
"patient_id",
"slot_at",
"duration_minutes",
"status",
"notes",
"created_at"
]
}403 Coach is outside the current brand
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"error",
"message"
]
}404 Patient or office hour not found
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"error",
"message"
]
}409 Office-hour slot unavailable
{
"type": "object",
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"error",
"message"
]
}Example
curl -X POST https://booking.platform.loop.health/v1/coaches/{coachId}/bookings \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{ ... }'Related
services/booking— service overview- All endpoints — directory across services
- Auth model — how scopes are enforced