Services are what clients book: an appointment with a duration, price, staff members who perform it and the hours it is available. Creating a service makes it bookable on the site; each booking of it is a Booking.
Endpoints that need a token: the site owner creates it in their admin (Developers > API reference). AI assistants: how to ask the user for one.
21 endpoints in 2 parts: Service, User Locked Hours.
The map of service locations. The map page itself; it loads its points from /locations-search.
Needs a signed-in user whose plan grants access.
curl -X GET 'http://smartman.max-media.io/locations-map?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
Services near a place, for the map: filtered by category, distance and price. Renders the map with the services found, with prices also in the second currency when one is set.
Needs a signed-in user whose plan grants access.
Only results in this collection.
Only locations with this origin address.
Only locations with this where.
The order of the results.
Returns a list of GeoLocation objects.
curl -X GET 'http://smartman.max-media.io/locations-search?ionic=true&collection=...&origin_address=...&where=...' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"service_id": "6543210fedcba98765432100",
"address": "example",
"latitude": 1,
"longitude": 1,
"formatted_address": "example",
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Locks the hours outside each service's allowed ranges (services). services is a list of services with their allowed ranges.
Needs the token of a signed-in user.
The service allowed range's services.
curl -X PATCH 'http://smartman.max-media.io/service-allowed-ranges?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "services": "..." }'Likes or unlikes a service and notifies its owner. Calling it again takes the like back. Answers { like }.
Needs the token of a signed-in user.
The ID of the service.
Returns the Service object.
curl -X PATCH 'http://smartman.max-media.io/service-likes/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Opens a service in the app (redirects to its app page). For links shared from the app: the website sends the visitor to the service in the app.
Works without a token; with a user token the answer is personal.
The service's URL slug, as in its address on the site.
curl -X GET 'http://smartman.max-media.io/service-redirect/{url}?ionic=true'{
"zip_code": "example",
"city": "example",
"address": "example",
"contact": "example",
"email": "jane@example.com",
"google_app": "example",
"workhours": "example",
"logo": "6543210fedcba98765432100",
"site_name": "Example",
"domain": "example",
"stock_domain": "example",
"isMarket": false,
"forbidden_collections": [
{
"collection_id": "6543210fedcba98765432100",
"_id": "6543210fedcba98765432100"
}
],
"isInit": false,
"template": "0000",
"lang": "en",
"favicon": "6543210fedcba98765432100",
"cacheEnabled": false,
"has_completed_startup_prompt": true,
"gmb_location": "example",
"ga_property": "example",
"site_generated_at": "2026-11-04T12:00:00.000Z",
"admin_first_opened_at": "2026-11-04T12:00:00.000Z",
"admin_last_opened_at": "2026-11-04T12:00:00.000Z",
"allowedComponents": {
"services": false,
"products": false,
"blogposts": false,
"programs": false
}
}Saves or unsaves a service for the signed-in user. Calling it again unsaves.
Needs the token of a signed-in user.
The ID of the service.
Returns the Service object.
curl -X PATCH 'http://smartman.max-media.io/service-saves/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}The services page, or the services as JSON with ?ionic: filtered by category and published state, and sorted. Paged with ?skip. Filters: ?collection, ?origin_address, ?published, ?selectedDate (services free that day); ?sortBy sets the order. Cached for an hour.
Needs a signed-in user whose plan grants access.
Only services with this published.
Only services with this completed.
The order of the results.
Only results in this collection.
Only services with this origin address.
How many results to skip - for paging.
Only services with this where.
Only services with this selected date.
Returns a list of Service objects.
curl -X GET 'http://smartman.max-media.io/services?ionic=true&published=...&completed=...&sortBy=...' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}
]Creates a service. url is made from title, so do not send one. Answers 201 with the service. To create it for an account you manage, send on_behalf_of (403 without catalogue rights). In social mode the url gets a number appended and a non-admin's service waits for review.
Works without a token; with a user token the answer is personal.
Title of service.
The service's on behalf of.
Where is the service performed.
Returns the Service object.
curl -X POST 'http://smartman.max-media.io/services?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "title": "...", "on_behalf_of": "...", "address": "..." }'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Deletes several services, ids comma-separated. Answers the ids that were deleted.
Needs the token of a signed-in user.
The service's delete ids.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/services-multiple/{delete_ids}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Applies the same changes (updates) to several services, ids comma-separated. Answers the ids that were changed.
Needs the token of a signed-in user.
The service's patch ids.
Collection, to which the blog post belongs.
The service's updates.
Returns the Service object.
curl -X PATCH 'http://smartman.max-media.io/services-multiple/{patch_ids}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "collection_id": "...", "updates": "..." }'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Updates a service. Fields outside the allowed list are silently ignored. locked_hours and locked_ranges are turned into the hours the service cannot be booked. Answers the service. 403 unless the owner, an admin or a manager with catalogue rights.
Needs the token of a signed-in user.
The ID of the service.
The ID of the service.
The service's converted price.
Hours that cannot be booked.
Date and time ranges that cannot be booked.
The service's attached dynamic models.
Attached media objects with ids.
Where is the service performed.
Returns the Service object.
curl -X PATCH 'http://smartman.max-media.io/services/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "_id": "...", "convertedPrice": "...", "locked_hours": "...", "locked_ranges": "...", "attached_dynamic_models": "..." }'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Deletes a service. Answers the deleted service. Its bookings stay. 403 unless the owner or an admin.
Needs the token of a signed-in user.
The ID of the service.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/services/{id}?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'A service's first picture. Answers the image bytes. Cached for an hour.
Public - no token needed.
The ID of the service.
Returns the Service object.
curl -X GET 'http://smartman.max-media.io/services/{id}/media?ionic=true'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Uploads a picture to a service (media, form field). Multipart upload; the picture is resized and added to the service's medias.
Needs the token of a signed-in user.
The ID of the service.
curl -X POST 'http://smartman.max-media.io/services/{id}/media?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'Removes a service's last picture. Deletes the media record too.
Needs the token of a signed-in user.
The ID of the service.
Returns an empty answer on success.
curl -X DELETE 'http://smartman.max-media.io/services/{id}/media/delete_last?ionic=true' \
-H 'Authorization: Bearer <TOKEN>'A service's page by its url, or the service as JSON with ?ionic. By url, not id. 404 when there is no such service. Comes with its staff members, category and connected services.
Pages limited to some users check the token when one is sent.
The service's URL slug, as in its address on the site.
Returns the Service object.
curl -X GET 'http://smartman.max-media.io/services/{url}?ionic=true'{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}Whether the signed-in user has a professional account and services. Answers { has_account }.
Needs the token of a signed-in user.
Returns a list of Service objects.
curl -X GET 'http://smartman.max-media.io/user-has-services?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"title": "Example",
"url": "example-item",
"static_url": "example-item",
"header": "example",
"description": "Text shown on the site.",
"bookable": true,
"expirable": false,
"confirm_bookings": false,
"show_notes": false,
"minutes_delete_bookings": 1,
"medias": [
{
"media": "6543210fedcba98765432100",
"gcs_url": "example-item",
"gcs_480_30_url": "example-item",
"gcs_720_30_url": "example-item",
"gcs_1080_30_url": "example-item",
"duration": 1,
"vimeo_uri": "example",
"vimeo_picture": "example",
"vimeo_url": "example-item",
"youtube_url": "example-item",
"youtube_picture": "example",
"thumbnail": "example",
"_id": "6543210fedcba98765432100"
}
],
"collection_id": "6543210fedcba98765432100",
"price": 49.9,
"online_payment": false,
"book_by_date": false,
"book_date_range": false,
"start_date": "2026-11-04T12:00:00.000Z",
"end_date": "2026-11-04T12:00:00.000Z",
"day_offset": 0,
"is_recurring": false,
"max_participants": 1,
"session_duration": 1,
"time_between_sessions": 0,
"discount": [
{
"days": 1,
"per_total_price": 49.9,
"fixed_price": 49.9,
"per_day": 1,
"_id": "6543210fedcba98765432100"
}
],
"monday": {
"active": false,
"hours": "example"
},
"tuesday": {
"active": false,
"hours": "example"
},
"wednesday": {
"active": false,
"hours": "example"
},
"thursday": {
"active": false,
"hours": "example"
},
"friday": {
"active": false,
"hours": "example"
},
"saturday": {
"active": false
}
}
]Adds or removes one locked range (locked_range). 403 for an account the user may not manage.
Needs the token of a signed-in user.
Only single user locked hours with this on behalf of.
The single user locked hour's locked range.
curl -X PATCH 'http://smartman.max-media.io/single-user-locked-hour?ionic=true&on_behalf_of=...' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "locked_range": "..." }'{
"user": "6543210fedcba98765432100",
"locked_ranges": [
{
"start": "2026-11-04T12:00:00.000Z",
"end": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}The hours the signed-in staff member cannot be booked. Null when none are set.
Needs the token of a signed-in user.
Returns a list of UserLockedHours objects.
curl -X GET 'http://smartman.max-media.io/user-locked-hours?ionic=true' \ -H 'Authorization: Bearer <TOKEN>'
[
{
"user": "6543210fedcba98765432100",
"locked_ranges": [
{
"start": "2026-11-04T12:00:00.000Z",
"end": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}
]Sets the hours the signed-in staff member cannot be booked (locked_ranges). Answers with no body.
Needs the token of a signed-in user.
Date and time ranges the staff member cannot be booked.
Returns the UserLockedHours object.
curl -X POST 'http://smartman.max-media.io/user-locked-hours?ionic=true' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "locked_ranges": "..." }'{
"user": "6543210fedcba98765432100",
"locked_ranges": [
{
"start": "2026-11-04T12:00:00.000Z",
"end": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}Replaces those hours, for them or an account they manage (?on_behalf_of). Replaces the whole list. 403 for an account the user may not manage; 404 when no hours were set yet.
Needs the token of a signed-in user.
Only user locked hours with this on behalf of.
Date and time ranges the staff member cannot be booked.
Returns the UserLockedHours object.
curl -X PATCH 'http://smartman.max-media.io/user-locked-hours?ionic=true&on_behalf_of=...' \
-H 'Authorization: Bearer <TOKEN>' \
-H 'Content-Type: application/json' \
-d '{ "locked_ranges": "..." }'{
"user": "6543210fedcba98765432100",
"locked_ranges": [
{
"start": "2026-11-04T12:00:00.000Z",
"end": "2026-11-04T12:00:00.000Z",
"_id": "6543210fedcba98765432100"
}
],
"_id": "6543210fedcba98765432100",
"updatedAt": "2026-11-04T12:00:00.000Z",
"createdAt": "2026-11-04T12:00:00.000Z"
}