Release Notes
New endpoint for charging the card stored against a membership, and a fix to cancelling a membership with a future-dated freeze.
POST /slapi/clients/slimcdchargecardonfile. Charges the credit card already stored against an active EFT membership, so a payment can be taken without the card number being handled by the calling application. Each attempt is recorded in the card processing log, and a charge can be safely retried without taking the money twice. See the Processing Card Transactions guide for the request and response, and for how this fits with recording the sale and the payment.POST /slapi/clients/updatedemographics can now also update a client’s gender, home store and skin type. GET /slapi/clients/clientdetails returns three additional fields alongside the existing ones: the home store name, the skin type description, and the date the client was added.john_smith@example.com was saved as john smith@example.com. This affected every endpoint that accepts a client record, including adding and updating a client.GET /slapi/clients/commprefs now reports the correct value for allow. It was previously returned as true for every client, including those who had opted out of marketing. Any process using this endpoint to decide whether to contact a client should be re-checked against the corrected values.POST /slapi/clients/cancelmembership now accepts a membership whose status is Frozen but whose freeze date has not yet arrived. A membership is set to frozen as soon as a freeze is booked, so one booked for a future date was being refused even though it is still running, and still being drawn, until that date.POST /slapi/clients/insertmembership now returns the reason a request failed. Certain failures were reported only as Internal error, which gave no indication of the cause.Memberships purchased for a future start date can now be activated early.
POST /slapi/clients/activatemembership now accepts memberships with a status of Purchased as well as On Hold. Previously a membership created with a future activeDate could not be activated ahead of that date, and the request was rejected as not found.Added the SunLync MCP endpoints.
Fix to the prorated amount returned by the EFT amounts endpoint.
GET /slapi/clients/geteftamounts.New endpoint for previewing freeze amounts on an active membership.
GET /slapi/clients/getfreezeamounts. Returns the amounts due to freeze an active membership, so they can be shown or collected at the point of sale. Required query parameters are membershipid and storecode. The response returns the membership number, the next draw date, the reduced monthly amount that will be taken at that draw while the membership is frozen (amountTakenAtNextDraw), and an amountsTakenNow section containing the freeze fee due now (amountTakenNow) along with its itemized tax (amountTax1, amountTax2, and amountTax3) and the store's configured tax names (serviceTax1Name, serviceTax2Name, serviceTax3Name). The freeze fee is charged only when the membership type is set to charge one, and no service tax is applied when the membership type marks the freeze fee as tax exempt. The request is rejected if the membership is not active or if its membership type does not allow freezing.New endpoint for previewing unfreeze amounts on a frozen membership.
GET /slapi/clients/getunfreezeamounts. Returns the amounts due to unfreeze a frozen membership, so they can be shown or collected at the point of sale. Required query parameters are membershipid and storecode. The response returns the membership number, the new next draw date, the amount that will be taken at that draw (amountTakenAtNextDraw), and an amountsTakenNow section containing the prorated amount due now along with its itemized tax (proratedAmountTax1, proratedAmountTax2, proratedAmountTax3, and proratedAmountTanTax) and the store's configured tax names (serviceTax1Name, serviceTax2Name, serviceTax3Name). Amounts follow the membership's unfreeze settings for whether the prorate and the next month's dues are taken now or at the next draw. The request is rejected if the membership is not currently frozen.Itemized tax detail in the EFT amounts endpoint.
amountsTakenNow section of GET /slapi/clients/geteftamounts now itemizes tax instead of returning a single combined amount. The prorated amount and the membership fee each return the three service taxes and the tan tax separately (proratedAmountTax1, proratedAmountTax2, proratedAmountTax3, proratedAmountTanTax, and the matching membershipFeeTax1–membershipFeeTax3 and membershipFeeTanTax). The store's configured names for the three service taxes are also included as serviceTax1Name, serviceTax2Name, and serviceTax3Name, so each tax can be shown by name on a receipt or display. The combined proratedAmountTax and membershipFeeTax fields have been replaced by these itemized fields; add the four tax fields in each group to get the previous combined total.New endpoint for previewing EFT membership amounts before a sale.
GET /slapi/clients/geteftamounts. Returns the amounts due for an EFT membership before it is sold, so they can be shown or collected at the point of sale. Required query parameters are membershipnumber, isupgrade, storecode, drawday, and activedate; currentmembershipnumber is also required when isupgrade is 1. The response gives the first draw date, the amount that will be taken at the first draw, and an amountsTakenNow breakdown containing the prorated amount, the membership fee, and the tax calculated for each using the membership's and store's tax settings.New optional field for the membership insert endpoint and optional blank-value clearing on the client update endpoint.
activeDate field to POST /slapi/clients/insertmembership. When provided, it sets the membership's active date. If the active date is in the future, the membership is created with a status of Purchased and becomes active on that date; otherwise it is active immediately.clearBlankFields flag to POST /slapi/clients/updatedemographics. By default, blank values continue to be ignored. When set to true, an empty string clears the corresponding field for a defined set of optional fields (middle initial, address line 2, home/work/cell phone, and email). Fields sent as null or omitted are never changed.New optional field for the membership insert endpoint.
firstDrawDate field to POST /slapi/clients/insertmembership. When provided, it sets the first draw date on the new membership.New optional field for the referral endpoint and a billing audit log fix.
cellPhone field to POST /slapi/clients/addreferral. When provided, the cell phone number is stored with the referral.Bug fix for payment and transaction inserts.
Bug fix for membership upgrade and downgrade.
New filter option for membership endpoints.
onlineonly query parameter to GET /slapi/memberships/eft and GET /slapi/memberships/noneft. When set to 1, results are filtered to memberships flagged for online use.onlineMembership and listPrice for each membership when those columns are present in the database.New endpoint for adjusting product inventory after a sale.
POST /slapi/setup/adjustinventoryaftersale endpoint reduces a product's on-hand quantity following a sale. Requires quantity, storecode, productNumber, employeeNumber, and receiptNumber.Bug fixes for membership upgrade and downgrade endpoints.
Follow-up performance refinement for billing info.
GET /slapi/clients/billinginfo when EnableEncryption is disabled. Builds on the v1.0.0.4 fix.New cross-market client search endpoint, billing-info performance fix, and improved connection-failure handling.
GET /slapi/clients/marketsearch?email=X endpoint searches all configured markets in a single request and returns matching clients tagged with their market. Eliminates the need to issue one search per market on multi-market deployments. Available when EnableMultiMarkets is enabled.GET /slapi/clients/billinginfo and POST /slapi/clients/billinginfo when EnableEncryption is disabled. The endpoints now respect this setting and skip unnecessary encryption work on both reads and writes.503 Service Unavailable response with a Retry-After header instead of dropping the connection.Stability fix for encryption-related crashes under concurrent load.
Performance and stability improvements targeting high-load environments with multiple API instances behind a load balancer.
POST /slapi/clients/insertclientpackage endpoint for inserting client packages via the API.GET /slapi/status endpoint now returns activeRequests and rejectedRequests counters for real-time monitoring of server load and throttling activity.CAST to avoid strict mode errors.MaxConnections=100 — Maximum concurrent requests per instance (default: 100)SemaphoreWaitMs=150 — Milliseconds to wait before rejecting with 503 (default: 150)IncludeMySQLConnId=false — Enable MySQL connection ID in response payloads (default: false)