Run these queries to collect site data for informed defaults.
Save each staff member's resourceId (not id). Note which one has default: true.
APPOINTMENT services REQUIRE at least one staff member. If no staff members exist, create one first using Bookings Staff Setup.
Warn the user if a service with a similar name already exists.
For any fields the user did not explicitly specify:
| Field | Default | Notes |
|---|---|---|
| Duration | 60 minutes | Set via schedule.availabilityConstraints.sessionDurations |
| Capacity | 1 | Appointments are typically 1-on-1 |
| Staff | Auto-assign | Use default: true staff, or first available |
| Online booking | Enabled | onlineBooking.enabled: true |
rateType: "FIXED"rateType: "NO_FEE", options.inPerson: true, options.online: falseresourceIddefault: true, or the first onePaid appointment:
Free appointment:
staffMemberIds is required — uses resourceId values, not staff member idschedule.availabilityConstraints.sessionDurations sets the appointment lengthSave the serviceId from the response: results[0].item.service.id
Provide a summary including:
Example:
I created "Strategy Consultation":
I assumed a 60-minute duration since you didn't specify. You can review and adjust the details in the service form.
| Error | Cause | Action |
|---|---|---|
| 400 "staffMemberIds required" | No staff assigned | Query staff; if none exist, create one via Bookings Staff Setup |
| 400 "INVALID_PAYMENT_OPTIONS" | Payment misconfigured | Free: inPerson: true, online: false. Paid: price > 0 |
| 403 | Permission denied | Inform user they lack permission |
| rateType | options.online | options.inPerson | Valid? |
|---|---|---|---|
| FIXED | true | false | ✓ |
| FIXED | false | true | ✓ |
| FIXED | true | true | ✓ |
| NO_FEE | false | true | ✓ |
| NO_FEE | true | false | ✗ |
| Any | false | false | ✗ |
Last updated: 22 June 2026