Skip to content

Edit Appointment

Request

Fully updates an Appointment. This is not a partial update: for a standard Appointment, resend staff_id, services, client, datetime, and seance_length, including when only custom_fields needs to change. A missing required field returns 422.

For a Group Event Appointment, send activity_id and client. The activity_id must match the Appointment's current Group Event. The API obtains staff_id, services, datetime, and seance_length from that Group Event.

Updating only custom fields

  1. Get the current Appointment.
  2. Copy the required main fields into this request without changing them.
  3. Add the new values to custom_fields, using each configured field code as a key.

The Business User must have both custom_fields_record_values_read_access and custom_fields_record_values_edit_access. Without both permissions, custom Appointment Field values are not updated.

Editing restrictions

The request can be rejected when the Appointment is waiting for online payment, lies outside the Business User's allowed editing period, is fully paid, or has an arrived client and the Business User lacks the corresponding edit permission.

If is_sale_bill_printed is true, keep the resent date, time, client, attendance status, Team Member, and Services unchanged when updating only custom fields. Changes covered by the printed receipt can require reversing the receipt first.

Security
BearerPartnerUser
Path
location_idnumberrequired

location ID

record_idnumberrequired

Appointment ID

Query
include_consumablesnumber
Example:include_consumables=0
include_finance_transactionsnumber
Example:include_finance_transactions=0
Headers
Acceptstringrequired

e.g. application/vnd.api.v2+json

Example:application/vnd.api.v2+json
Content-Typestringrequired

application/json

Authorizationstringrequired

Bearer partner_token, User user_token

Bodyapplication/jsonrequired
One of:

Request body for creating or fully updating an Appointment.

activity_idinteger
Value:0
team_member_idnumber

Team Member ID

servicesArray of objects

Service parameters (id, cost, discount)

clientobject

Client parameters (phone, name, email)

save_if_busyboolean

Whether to keep the appointment if the time is busy or non-working, or give an error

datetimestring, (date-time)

Date and time of appointment

seance_lengthnumber

Appointment duration in seconds. Includes technical_break_duration. To add a technical break without reducing the service time, increase seance_length by the break delta.

send_smsboolean

Whether to send SMS with the details of the appointment to the client

commentstring

Appointment Comment

sms_remain_hoursnumber

Specifies how many hours before the visit an SMS reminder should be sent to the client. Set to 0 if no reminder is needed.

email_remain_hoursnumber

Specifies how many hours before the visit an email reminder should be sent to the client. Set to 0 if no reminder is needed.

attendancenumber

Appointment status (2 - User confirmed the appointment, 1 - User came, services provided, 0 - user waiting, -1 - user did not show)

api_idstring

External system ID

custom_colorstring

Appointment color

record_labelsArray of strings

Array of post category IDs

technical_break_durationnumber or null
One of:

Technical break duration in seconds.

  • Must be in multiples of 300 (5-minute intervals)
  • Maximum value is 3600 (1 hour)
  • If null or not provided, uses location default from Settings → Appointment Log → Technical Breaks
[ 0 .. 3600 ]
number
custom_fieldsobject

Custom Appointment Field values keyed by field code.

The Business User must have both custom_fields_record_values_read_access and custom_fields_record_values_edit_access. When updating an Appointment, supplying custom_fields does not make the request partial: resend the required main fields for the applicable Appointment type.

curl -i -X PUT \
  'https://developer.alteg.io/_mock/en/b2b-v1/openapi/locations/{location_id}/appointments/{record_id}?include_consumables=0&include_finance_transactions=0' \
  -H 'Accept: application/vnd.api.v2+json' \
  -H 'Authorization: Bearer <YOUR_Bearer {PartnerToken}, User {UserToken}_HERE>' \
  -H 'Content-Type: application/json' \
  -d '{
    "team_member_id": 8886,
    "services": [
      {
        "id": 331,
        "first_cost": 9000,
        "discount": 50,
        "cost": 4500
      }
    ],
    "client": {
      "phone": "+13155550175",
      "name": "James Smith",
      "email": "j.smith@example.com"
    },
    "datetime": "2026-09-21T23:00:00.000-05:00",
    "seance_length": 3600,
    "custom_fields": {
      "my_custom_field": 123,
      "some_another_field": [
        "first value",
        "second value"
      ]
    }
  }'

Responses

Created

Bodyapplication/json
successboolean

Success status (true)

Example:true
dataobject

Object with data

Example:
{ "id": 999, "services": [ { … }, { … } ], "client": { "phone": "+13155550175", "name": "James Smith", "email": "j.smith@example.com" }, "clients_count": 1, "staff": { "id": 8886, "name": "Alice Smith", "spec": "stylist" }, "datetime": "2026-09-21T23:00:00.000-05:00", "seance_length": 3600, "create_date": "2026-09-21T23:00:00.000-05:00", "comment": "test appointment!", "visit_attendance": 1, "confirmed": 1, "sms_before": 6, "sms_now": 1, "sms_now_text": "", "email_now": 1, "notified": 0, "master_request": 1, "api_id": "", "from_url": "", "review_requested": 0, "activity_id": 0, "documents": [ { … } ] }
metaArray of objects

Metadata (empty array)

Example:
[]
Response
{ "success": true, "data": { "id": 999, "services": [ … ], "client": { … }, "clients_count": 1, "staff": { … }, "datetime": "2026-09-21T23:00:00.000-05:00", "seance_length": 3600, "create_date": "2026-09-21T23:00:00.000-05:00", "comment": "test appointment!", "visit_attendance": 1, "confirmed": 1, "sms_before": 6, "sms_now": 1, "sms_now_text": "", "email_now": 1, "notified": 0, "master_request": 1, "api_id": "", "from_url": "", "review_requested": 0, "activity_id": 0, "documents": [ … ] }, "meta": [] }