Skip to main content

Create service

Method POST

https://my.easyweek.io/api/public/v2/services

Description: This endpoint creates a service in the workspace. Only the core service fields are supported (price_type is always base). Omitting location_uuids attaches the service to all workspace locations; omitting staffer_uuids attaches it to all bookable staff.

note

To list services, use Get Services (GET /locations/{location_uuid}/services).

Example Request

curl -i -X POST \
https://my.easyweek.io/api/public/v2/services \
-H 'Authorization: Bearer <YOUR_SECRET>' \
-H 'Workspace: <YOUR_WORKSPACE>'

Request body

{
"name": "Basic cut",
"duration": 30,
"price": 2000,
"description": null,
"category_uuid": "41765a3f-d8eb-4853-8558-0718c49c58d0",
"is_pause": true,
"pause": 10,
"price_discount": 1500,
"price_type": "base",
"live": true,
"live_in_widget": false,
"is_duration_hidden": false,
"is_price_hidden": false,
"is_top": false,
"is_auto_allocated": false,
"starting_at": false,
"class": "blue",
"location_uuids": ["123b2980-3506-4f8c-abce-97e1ab653406"],
"staffer_uuids": ["eac5a506-69c0-40c4-8758-85c501d26bcb"],
"images": []
}

Body Parameters

  • name (string, required): The service name. May not contain a website address or email — such values are stripped and the request is rejected.
  • duration (integer, required): The service duration in minutes (5–1425).
  • price (integer, required): The service price in minor units (e.g. cents).
  • description (string, optional): The service description.
  • category_uuid (string, optional): The UUID of the service category.
  • is_pause (boolean, optional): Whether a buffer (extra time) is added after the service.
  • pause (integer, optional): The buffer length in minutes (max 180).
  • price_discount (integer, optional): A discounted price, must be less than price.
  • price_type (string, optional): Pricing model. Only base is supported.
  • live (boolean, optional): Whether the service is active.
  • live_in_widget (boolean, optional): Whether the service is shown in the booking widget.
  • is_duration_hidden (boolean, optional): Hide the duration in customer-facing surfaces.
  • is_price_hidden (boolean, optional): Hide the price in customer-facing surfaces.
  • is_top (boolean, optional): Mark the service as featured.
  • is_auto_allocated (boolean, optional): Whether staff are auto-allocated for this service.
  • starting_at (boolean, optional): Display the price as "starting at".
  • class (string, optional): A configured color key.
  • location_uuids (array, optional): Locations the service is offered at. Omit to attach to all workspace locations.
  • staffer_uuids (array, optional): Staff who perform the service. Omit to attach to all bookable staff.
  • images (array, optional): A list of image paths.

Example Response

{
"uuid": "43537759-435b-4871-bf11-e3ace6a4464b",
"name": "Basic cut",
"description": null,
"images": [],
"currency": "EUR",
"price": 2000,
"price_formatted": "€20.00",
"price_type": "base",
"discount": 1500,
"discount_formatted": "€15.00",
"duration": {
"value": 30,
"label": "minutes",
"iso_8601": "PT30M"
},
"is_extra_time": true,
"extra_time": {
"value": 10,
"label": "minutes",
"iso_8601": "PT10M"
},
"is_price_hidden": false,
"is_duration_hidden": false,
"is_top": false,
"starting_at": false,
"live": true,
"live_in_widget": false,
"class": "blue",
"category": {
"uuid": "41765a3f-d8eb-4853-8558-0718c49c58d0",
"name": "Hair Styling",
"order": 1,
"cover": null
},
"locations": [
{ "uuid": "123b2980-3506-4f8c-abce-97e1ab653406", "name": "Downtown" }
],
"staffers": [
{ "uuid": "eac5a506-69c0-40c4-8758-85c501d26bcb" }
]
}