Skip to main content

Replace booking service

Method PUT

https://my.easyweek.io/api/public/v2/bookings/{booking_uuid}/services

Description: This endpoint swaps the service of a simple booking, re-deriving price, duration and tax from the new service (using the same pricing pipeline as booking creation). The booking's end_time shifts if the new duration differs.

caution

The booking must be replaceable: exactly one non-resource service, quantity = 1, a single slot, unpaid, no POS goods, and open status. Anything else returns 409 booking_not_replaceable — create a new booking for complex changes.

Example Request

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

Request body

{
"service_uuid": "6b9c2d1e-3f4a-4b5c-8d9e-0a1b2c3d4e5f"
}

Path Parameters

  • booking_uuid (string, required): The unique identifier of the booking.

Body Parameters

  • service_uuid (string, required): The UUID of the new service.

Example Response

The updated booking resource — the same shape returned by Get booking.

{
"uuid": "f017724b-d95a-4267-8704-df99a9edaf56",
"location_uuid": "123b2980-3506-4f8c-abce-97e1ab653406",
"start_time": "2023-12-21T10:00:00Z",
"end_time": "2023-12-21T10:45:00Z",
"timezone": "Europe/Berlin",
"duration": { "value": 45, "label": "minutes", "iso_8601": "PT45M" },
"quantity": 1,
"slots_count": 1,
"cancel_reason": null,
"canceled_by": null,
"is_canceled": false,
"is_completed": false,
"public_notes": "Hello world",
"currency": "EUR",
"policy": {
"policy_text": null,
"is_cancelable": true,
"cancellation_offset": 0,
"cancellation_text": null,
"is_changeable": true,
"change_offset": 0,
"change_text": null
},
"links": [
{ "type": "ical", "link": "https://my.easyweek.io/api/notifications/bookings/6929741/icalendar" },
{ "type": "google_meet", "link": "" },
{ "type": "zoom", "link": "" },
{ "type": "microsoft_teams", "link": "" }
],
"order": {
"tax": [],
"subtotal": 15000,
"subtotal_formatted": "€150.00",
"amount_paid": 0,
"amount_paid_formatted": "€0.00",
"total": 15000,
"total_formatted": "€150.00"
},
"ordered_services": [
{
"uuid": "d1e2f3a4-b5c6-4d7e-8f9a-0b1c2d3e4f5a",
"timezone": "Europe/Berlin",
"reserved_on": "2023-12-21T10:00:00Z",
"reserved_until": "2023-12-21T10:45:00Z",
"quantity": 1,
"name": "Haircut & style",
"currency": "EUR",
"price": 15000,
"price_formatted": "€150.00",
"discount": 0,
"discount_formatted": "€0.00",
"original_price": 15000,
"original_price_formatted": "€150.00",
"tax_name": null,
"tax_value": null,
"duration": { "value": 45, "label": "minutes", "iso_8601": "PT45M" },
"original_duration": { "value": 45, "label": "minutes", "iso_8601": "PT45M" }
}
]
}