OnSched API & dashboard 3.22.6 — Booking, address, calendar, and portal updates
Customer booking limits
Ended appointments no longer take a bookingLimit spot. A spot frees when the appointment ends, so that customer can book again up to the cap. Lifetime booking caps and the location daily booking limit are unchanged.
Address updates
PUT /v3/location/{id} and PUT /v3/company/{id} store address fields that are sent as an empty string or null on an address that already exists. Keys omitted from Address stay as they are. An all-blank Address on a location or company that has no address row still does not create one.
When clearing street, city, state, or postal code in the merchant portal, saving includes each cleared field in the update. Empty text fields are sent as an empty string. City, state, and country are sent as null when cleared. Fields that were not edited are left out of the request, and the stored value stays as it was. Saving without edits does not send an update.
PUT /v3/resource/{id}, PUT /v3/user/{id}, and PUT /v3/customer/{id} also persist explicit empty string or null address values on an existing address. POST /v3/customer applies an explicit clear when it restores a deleted customer who already has an address. An all-blank Address on a new customer, or on a restored customer who has no address row, does not create one.
Google Calendar invites
The appointment event sent to Google Calendar uses the street address only when street, city, state, and postal code are all present and the location is not virtual. There is no virtual column on Location; isVirtual or virtual set to true on the location object is honored when a caller supplies it. When the address is empty or the location is virtual, the event uses the resource conferenceInfo or an http/https value in the appointment location field. If neither is present, the event omits location instead of using the location name.
Notification placeholders
Email, SMS, and external calendar descriptions render an empty, null, or unknown {{...}} placeholder as blank text. {{appointment.CustomFields.fieldName}} and {{customField.appointment["fieldName"]}} resolve when that custom field has a value, including values stored as hstore text. The same shapes work for customer and location custom fields.
Merchant Portal lists
Customers, locations, services, resources, and tickets now use the same page control. It shows the total count, numbered pages, and buttons for the first, previous, next, and last page.
Add Customer, Add Location, Add Service, Add Resource, and Create Ticket sit in the list footer. The last row stays visible and can be selected. The customers list scrolls in one place.
