API Updates - From a Heavy Custom Front End User
We have a lot of things that would really help us utilize the API. Here's a list of the things that we see.
- Product Units (banked units)
- Today a client's Product Units balance (e.g. "58 Jeuveau Units") can't be read or adjusted through the Admin API. There's no field on Client and no mutation. The inventory mutations (setProductQuantity etc.) only change shelf stock. Request: read, create, adjust and void a client's units, with a history of changes (who, when, why). Let units be added to packages and redeemed against an order.
Use case: we sell banked tox units ahead of time (e.g. a 50/100/200-unit Jeuveau bank). Right now the balance lives in our own ledger, separate from Boulevard, and the desk has to keep the two in sync by hand.
Related: tox is a single open-ended service with no unit count, so a voucher can't say "up to X units."Custom fields
Fields created with createSchemaField should be usable in Forms, in the same way as fields made in the dashboard.
Let us rename, archive or delete a field. Right now every key is permanent once it's created.
Add a file/image field type.
Forms
Today all we can see is pendingFormCount on an appointment.Request: list the forms assigned to an appointment or client and their status (sent, started, complete) without the form contents. Let us attach forms to a service. Each service we create through the API needs forms attached by hand in the dashboard. Let us create forms too.
Use case: we want to sell forms, meaning a paid product that issues a form, such as a treatment plan or pre-visit assessment. We'd also like to embed the client forms page in our own flow; right now it can't be iframed.
We are seeing lots of people not fill out all their forms. We want to be able to see individual forms haven't been completed, sent a link to those individually, have forms move to the next, etc. Basically, we want the option to make the experience better if the default experience doesn't get them to fill out correctly
Payments and checkout
Apple Pay and Google Pay in the Book SDK checkout.
A way to record an outside or "Other" payment on an order. -OrderPaymentMethod today is only CARD | ACCOUNT_CREDIT.
Take a payment on an existing appointment or open order. Today our workaround is to load account credit and have the desk apply it.
Void or close an open order, or remove a line. We can create open unpaid orders (great for pay-later and financing) but can't clean them up, so the desk voids abandoned ones by hand.
Client agreement prompts on headless membership checkout. Boulevard's native agreement doesn't fire, so we built our own consent record.
Marketing sends
Send SMS and email through Boulevard's marketing tools by API, to a segment or to a list of client IDs, with send status and opt-out reporting returned.
Let us create and update client segments or tags in bulk for those sends.
Expose marketing consent on client create in the Book SDK. The widget opts clients in, but headless bookings can't, so our opt-in rate dropped sharply after we went headless.
Packages
Expose the per-location "available for online sale" toggle in the API. A package can be active and activated at both locations and still not be sold online, because that setting is dashboard-only. We once found 80 packages in that state.
Let a package be limited to active members.
Offers and member pricing
Set a membership-plan restriction when creating an offer. Today the API can create offers but not restrict them to plans.
Read which plans an existing offer is restricted to. Today we can only see that it has membership restrictions.
Let offers discount service options. Area-priced services (laser hair removal, Morpheus8, IPL) carry their price on options, so member discounts on those are applied by hand at checkout.
Memberships, vouchers, gift cards, account credit
Create a membership for a client by API. This is for prepaid "pay-ahead" plans we grant.
Set or change expiresOn on an already-issued voucher.
List a client's vouchers directly. Today there's no root voucher query and no voucher field on Client.
Record a reason on voucher decreases (redeemed, expired, voided, refunded). Today a void looks the same as a redemption.
Set the purchasing client on a gift card after it's created (UpdateGiftCardInput has no clientId).
Booking
Enforce required option groups (minLimit >= 1) in the Book SDK. Today a cart can book a bare $0 five-minute appointment with no option selected.
Expose a "blocked from online booking" flag. Today the only sign is a day that returns zero times once the client is attached to the cart.
Keep chosen options (e.g. treatment areas) on the finished appointment and order line.
Un-cancel or move a cancelled appointment.
Reporting and sync
totalCount on connections, and documented filter syntax for appointments(query:).
Date filtering and ordering on appointmentRatings, plus the staff reply.
Write access to appointment notes and comments, for our chart-review workflow.
Keep shift history for staff who have left. Today their shift rules are deleted, so past capacity can't be rebuilt.
More webhook events: orders, payments, memberships, vouchers, forms completed, client updated.
Rate limits
A cheaper availability lookup. cart.getAvailableCategories() costs 100 points and runs on every cart create, so about 15 availability lookups use up the budget and live patient bookings start failing. Options that would help: a lighter "bookable times for staff × service × day" query, a higher limit for read-only availability, or a cached menu.