API End Point

Scenario

Old Behavior

New Behavior

API Docs Link

Webstore > {api_url}/v1/guests/d2da2994-e4f0-40ea-b2cd-a771ee83707a/appointments

Related host guest token should be able to view appointments of family members

Host guest token cannot view appointment list of another user

Host guest token can view appointments of another guest if he/she is part of the relationship.

API Document

Webstore > {api_url}/v1/bookings/7ac33976-3af8-45b6-87f8-e82e07ce1746/slots/confirm

Guest should be able to confirm bookings for family members.

Guests cannot confirm bookings for other guests.

Guest should be able to confirm bookings for family members.

API Document

Webstore > {api_url}/v1/guests/d2da2994-e4f0-40ea-b2cd-a771ee83707a

Allow for relationship hosts to be able to update details of family member profiles.

Would not allow for a guest to update another guest's details

Should allow for a guest to update another guest details, if they are in a relationship and the guest token is the relationship host.

API Document

Webstore > {api_url}/v1/bookings/7ac33976-3af8-45b6-87f8-e82e07ce1746/slots/reserve

Guest should be able to reserve the booking for a family member.

Guest is unable to reserve appointments for other guests

Guest should be able to reserve appointments for family members.

API Document

{api_url}/v1/invoices/(invoice_id)/online_payments

As a security concern, few processors are restricting to show HPP in iframe while doing a manual or saved card charge. To handle this we have introduced new parameter in API response to indicates the client to load the given “hosted_payment_uri” in iframe or not.

Just constructs the hosted payment url and return in response while doing a manual or saved card charge. Earlier it doesn't indicate where to load this url. For few processors client side custom logic is written based on that it used to load.

New Parameter “load_hosted_payment_uri_in_iframe” is added in response. This response parameter indicates the client to load the given “hosted_payment_uri” in iframe or not while doing a manual or saved card charge. And custom logic from the client is removed. Add new param in response "load_hosted_payment_uri_in_iframe": true,

API Document

:POST {api_url}/v1/employees

If entire object of the catalog information is not provided, then the missing values in the database would be updated with default values.

The request body does not contain catalog information catalog_info - was not present "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

The request body contains catalog information catalog_info has been added "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

API Document

{api_url}/v1/invoices/d1fb6a44-0d35-4992-aa96-24b58cd79369/cancel

Guest should be able to cancel bookings for family members.

Guests cannot cancel bookings for other guests.

Guest should be able to cancel bookings for family members.

API Document

{api_url}/v1/guests/(guest_id)/accounts

As a security concern, few processors are restricting to show HPP in iframe while adding payment account in guest profile. To handle this we have introduced new parameter in API response to indicates the client to load the given “hosted_payment_uri” in iframe or not.

Just constructs the hosted payment url and return in response while adding payment account in guest profile. Earlier it doesn't indicate where to load this url. For few processors client side custom logic is written based on that it used to load.

New Parameter “load_hosted_payment_uri_in_iframe” is added in response. This response parameter indicates the client to load the given “hosted_payment_uri” in iframe or not while adding payment account in guest profile. And custom logic from the client is removed. Added new param in response "load_hosted_payment_uri_in_iframe": true,

API Document

Webstore > {api_url}/v1/guests/ef6a4b6a-8fd7-43cc-babd-dfc80da0da3b

Related host guest token should be able to view the profile details of a family member.

Guest token cannot view profile details of another user

Guest token can view another guest's profile if he/she is in a relationship with the host.

API Document

: PUT {api_url}/v1/employees/(employee_id)

Catalog information is an optional field so no validation should be performed in case the catalog information related field items are empty

The request body model does not contain the catalog information catalog_info - was not present "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

The request body model contains the catalog information catalog_info has been added "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

API Document

{api_url}/v1/sales/salesreport?center_id=a11f578a-1b81-4de0-8834-915f79e5362b&start_date=2018-07-22&end_date=2018-07-24&item_type=0&status=2,show_negative_qty_for_refund=1

There is tax_break_up object which is coming as per the tax components applied on the item. If the tax applied on an item is zero, this object is empty and it is getting filled only for the items where tax is calculated and non-zero. Changed tax_break_up so that it will be consistent for all items

As per the old behaviour, tax_break_up comes as below for guest 1 invoice, “tax_break_up“: { } for guest 2 invoice “tax_break_up“: { “CGST“: 9.0000, “SGST“: 9.0000 }

There are no changes done in the Request/Response/URL of the API. Change is done in the data of tax_break_up object which shows the tax calculated component wise like below. “tax_break_up“: { “CGST“: 9.0000, “SGST“: 9.0000 } Consider sale of a product to two different guests(Guest 1 and Guest 2). The package is redeemed on the product sold to Guest1, so tax got nullified and it is zero. And there is no redemption done on the product sold to the guest 2 and tax is calculated. New behaviour: As per the new behaviour, changed tax_break_up so that it will be consistent for all items which comes as below for guest 1 invoice, “tax_break_up“: { “CGST“: 0.0000, “SGST“: 0.0000 } for guest 2 invoice “tax_break_up“: { “CGST“: 9.0000, “SGST“: 9.0000 }

API Document

Webstore> {api_url}/v1/bookings

A guest should be able to create bookings for family members.

A guest could not create service bookings for family members

Guest should now be able to create service bookings.

API Document

{api_url}/v1/bookings&http://devapi.zenoti.com/v1/centers/34f7b069-1bce-4f24-b9b2-f58ebbf768f0/services?page=1&size=5&{api_url}/v1/centers/34f7b069-1bce-4f24-b9b2-f58ebbf768f0/services/34f7b069-1bce-4f24-b9b2-f58ebbf768f0

When org has parallel groups enabled it returns parallel group service ids in service response When we pass parallel_service_group and id to v1/bookings then it will book two services in parallel

We never used to get parallel_service_groups in services api. No support for parallel booking

New Parameter “parallel_service_groups” is added to response for v1/centers/{center_id}/services/{service_id}) api New Parameter “parallel_service_groups” is added to response for v1/centers/{center_id}/services/ api New request parameter "parallel_Service_group_:{id}}" is added to v1/bookings

API Document

POST : v1/guests/{guest_id}/tier:

Even if the logged in user has the role permission, API asks for the user name and password every time. Now made changes so that user name and password are optional, and then verifying the context user permissions

Even if the logged in user has the role permission, API asks for the user name and password every time.

Verifying the context user permission if the user name and password are not received in the request

NA

{api_url} /v1/invoices/InvoiceItem/PriceChanges?center_id={{center_id}}&therapist_id=null&service_id=null

For a given centerid, all future appointments with no discounts and adjustments made should be updated with new price where finalprice>0

If therapistid and serviceid is not passed, throw an error that either of them has to be passed

If therapistid and serviceid is not passed, then updating future appointments of center

NA

{api_url}/Appointments/HtmlCustomData/{InvoiceItemId}/{FormId}

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Appointments/{GuestId}/GuestHtmlCustomData

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Appointments/{AppointmentId}/CustomFormManualExpiry

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Appointments/{AppointmentId}/HtmlTagCustomData/{TagId}

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Appointments/{AppointmentId}/HtmlCustomData

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url} /v1/reports

Need to get "report last viewed time" to reports. Can also be arranged in the order of the last viewed time.

Gets reports list with no last viewed time information

Gets reports list along with last viewed time information

NA

{api_url}/v1/guests/{guest_id}/loyalty_forms

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/v1/entities/{ServiceEntityPk}/form_data

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/api/Catalog/Guests/GuestHtmlCustomData

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Catalog/Appointments/{AppointmentId}/HtmlTagCustomData/{TagId}

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/Catalog/Appointments/{AppointmentId}/HtmlCustomData

Passed SourceApp from context to internal stored procedure call for form log changes. No change in request or response.

No change in behavior

No change in behavior

NA

{api_url}/v1/opportunities

Additional details to be accessed, rather than the ones which we are getting right now

No change in the existing behavior but added extra values in request and response objects

We have added few parameters(ExpandAllIds, ExpandAllOpportunityProperties) in request body and one parameter(include_permission_level) in path parameters . We have added some more values in response which will be included in response when the parameters added in request are set to 1 . StatusId, CenterId, SalesOwnerId and DispositionId will be included in response when ExpandAllIds is set to 1 Description, PriorityId, PriorityText, NotesCount, TypeText, SourceId, SourceText will be included in response when ExpandAllOpportunityProperties is set to 1 Permission will be included in response when include_permission_level is set to 1

NA

{api_url} /v1/reports/memberships/schedule_collections/flat_file

Adding new request parameter partial_payment of type boolean. When partial_payment is true , then api retrieves only partially paid invoices of suspended memberships. When partial_payment is false, then api retrieves all invoices of suspended memberships.

All suspended memberships are retrieved irrespective of payment in invoices.

When partial_payment is true , then api retrieves only partially paid invoices of suspended memberships. When partial_payment is false, then api retrieves all invoices of suspended memberships. This partial_payment parameter has no effect on memberships with other than suspended status

NA

{api_url}/v1/reports/packages/schedule_collections/flat_file

Added new column last_collection_attempted, this will get filled when scheduled payments collection was attempted. So last attempted collection date will get populated in this field.

There are no changes done in the Request/URL of the API. last_collection_attempted column will not be present in response model.

There are no changes done in the Request/URL of the API. Change done is in the response model. Added last_collection_attempted which shows date of last attempt made by scheduler to collect scheduled payment.

NA

{api_url}/v1/integrations/1/journal_types_mapping?view_id=a11f578a-1b81-4de0-8834-915f79e5362b&employee_id=b793463d-2f03-43e5-ae47-a5a1c1be0de6

create the list of ItemTypeJE mappin

NA

NA

NA

{api_url}/v1/integrations/1/journal_types_mapping?view_id=a11f578a-1b81-4de0-8834-915f79e5362b&page=1&size=1

get the list of ItemTypeJE mappings

NA

NA

NA

{api_url}/v1/policies

Fetch configured policies

NA

NA

NA

{api_url}/api/Catalog/Appointments/Availabletimes

When an group of empty Slotbooking model array sent from the request, response should give open slots without the availibility of service, therapist & guest.

When an array of empty slotbookings were sent from the request, it resulted in slots based on only first guest service model object.

with this change, slots would come based on array of slotbooking object

NA

: GET {api_url}/v1/employees/(employee_id)

The response body should contain the whole catalog information sub-object

The response model does not contain the catalog information catalog_info - was not pereset "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

The response model contains the catalog information catalog_info has been added "catalog_info" : { "show_in_catalog" : true, "display_name" : "catalog display name", "description" : "this is a description" }

NA

: DELETE{api_url}/v1/employees/(employee_id)/security_roles/(role_id)

When the user does not have access to delete the role, then the API should throw an error message

NA

API is used to delete the role of an employee

NA

{api_url}/api/Catalog/Payments/Invoice/IntializeCloudPayment

As a security concern, few processors are restricting to show HPP in iframe while doing a saved charge in webstore. To handle this we have introduced new parameter “LoadHostedPaymentURLInIframe” in API response to indicates the client to load the given “HostedPaymentURL” in iframe or not when card is associated with 3ds.

Just constructs the hosted payment url and return in response while doing a saved charge in webstore. Earlier it doesn't indicate where to load this url when card is associated with 3ds. For few processors client side custom logic is written based on that it used to load.

New Parameter “LoadHostedPaymentURLInIframe” is added in response. This response parameter indicates the client to load the given “HostedPaymentURL” in iframe or not while doing a saved charge in webstore when card is associated with 3ds. And custom logic from the client is removed. Add new param in response "LoadHostedPaymentUriInIframe": true,

NA

{api_url}/api/Catalog/Payments/Invoice/IntializePayment

As a security concern, few processors are restricting to show HPP in iframe while doing a manual charge in webstore. To handle this we have introduced new parameter “LoadHostedPaymentURLInIframe” in API response to indicates the client to load the given “HostedPaymentURL” in iframe or not.

Just constructs the hosted payment url and return in response while doing a manual charge in webstore. Earlier it doesn't indicate where to load this url. For few processors client side custom logic is written based on that it used to load.

New Parameter “LoadHostedPaymentURLInIframe” is added in response. This response parameter indicates the client to load the given “HostedPaymentURL” in iframe or not while doing a manual charge in webstore. And custom logic from the client is removed. Add new param in response "LoadHostedPaymentUriInIframe": true,

NA

{api_url}/api/Catalog/Payments/Guest/InitializeSaveCard

Just constructs the hosted payment url and return in response. Earlier it doesn't indicate where to load this url. For few processors client side custom logic is written based on that it used to load.

New Parameter “LoadHostedPaymentURLInIframe” is added in response. This response parameter indicates the client to load the given “HostedPaymentURL” in iframe or not. And custom logic from the client is removed. Add new param in response "LoadHostedPaymentUriInIframe": true,

NA

{api_url}/api/Catalog/Payments/ProcessorSettings

As a security concern, few processors are restricting to show HPP in iframe. To handle this we have introduced new parameter in API response to send redirect url or not so that final payment response is sent to the redirection url.

Retrieves all the payment processor settings.

Retrieves the processor settings required for client. In this we introduced parameter, "IsRedirectionUrlRequired" which tells webstore to pass redirection url from their side. So that if processor doesnt support loading HPP in iframe then we redirect the response to the given redirection URL. add new params to response "IsRedirectionUrlRequired": "true"

NA

{api_url}/v1/reports/employees/sales/flat_file?page=1&size=3

Missed to honor center level employee related setting "Free service revenue includes" in the employee sales api. Honored this setting now which will have impact on "commissionable_discount".

Consider a invoice which has item of $100. Appied a discount of $50 and paid remaining through cash. As per the old behaviour, commissionable_discount is coming as $50 irrespective of the center level employee related setting "Free service revenue includes"

Consider a invoice which has item of $100. Appied a discount of $50 and paid remaining through cash. As per the new behaviour, commissionable_discount will come as $50 if the "Manual discount" is selected in the center level employee related setting "Free service revenue includes" commissionable_discount will come as $0 if the "Manual discount" is not selected in the center level employee related setting "Free service revenue includes"

NA

{api_url}/v1/reports/sales/cash_basis/flat_file

Fixed below two issues and there are no changes in the request/response/url structure.
Package redemption values are doubled when there are other payments along with package redemption in the invoice and All is selected in the payment type filter.
package redemption value reflected as sales collected when other payment type is selected in payment type filter.

Consider a invoice with two items in which one is redeemed using package and other paid using cash. Sales cash api gives two records(one for package redemption and other for cash payment).When we pass no specific payment type, it gives all payment type transactions and show Sales Collected as the amount collected in each transaction. But Sales collected is getting doubled for the payment redemption transaction which is incorrect

And when a specific payment type is selected other than package, package redemption value is coming in the sales collected which actually should be the amount collected from the respective transaction

Consider a invoice with two items in which one is redeemed using package and other paid using cash. Sales cash api gives two records(one for package redemption and other for cash payment).When we pass no specific payment type, it gives all payment type transactions and show Sales Collected as the amount collected in each transaction. And Sales collected will the redemption amount for the package redemption transaction

And when a specific payment type is selected other than package, only the selected payment type transactions will come with the amount collected from the respective transaction

NA

{api_url}/v1/reports/collections/flat_file?page=1&size=10

This is to fix a issue in due amount calculation. No changes in the request/response/url structures. Due not calculating correctly for the invoices which has items having same start time and redeemed from a package

Consider a invoice with two items redeemed from two different packages, collections report api gives two records(one for each package-item redemption). This api give due amount as on each transaction. Let's say redemption value of first package is 100 and the second package is 200. Now the due amount for both the transactions is coming as 300 which is incorrect

Consider a invoice with two items redeemed from two different packages, collections report api gives two records(one for each package-item redemption). This api give due amount as on each transaction. Let's say redemption value of first package is 100 and the second package is 200. As per the new behaviour, the due amount for the first package redemption is 200 and for second package redemption it is 0

NA

{api_url}/v1/entities/definition

When Entity is enabled for an organization and a guest has entities(ex: Pets), pet profile related APIs are introduced.

These are new APIs implemented for this hotfix.

To get list of entities for a guest, to get an attributes list for an organization, create/update pet for a guest

NA

{api_url}/api/Catalog/Guests/UserAppointments

When form is read only, 6th bit in SCD value should be 0

When form is read only, 6th bit in SCD value giving 1

When form is read only, 6th bit in SCD value should be 0

NA

{api_url}/v1/centers/?view_id=A56292E4-8597-48A0-B139-3F0386CB8DFA&expand=taxgroups&page_num=-1

Added tax groups list to each center response if expand array has taxgroups string and also added view_id parameter to get only centers which are in that view id.

Doesnot support taxgroups for expand parameter and view_id parameter.

supports expand= taxgroups which adds taxgroups array to that each center and if view_id is given then response contains only centers with in that view_id.

NA

{api_url}/v1/products/vendor_center_associations

Vendor product center association

NA

NA

NA

{api_url}/api/Catalog/Appointments/ConfirmReservation

Added entity related changes

Not supports entities

Entity mapping also works now for appointment booking

NA

{api_url}/api/Catalog/Appointments/ReserveSlots

Pet value

NA

NA

NA

{api_url}/v1/integrations/1/external_payment_types?view_id=a11f578a-1b81-4de0-8834-915f79e5362b&page=1&size=10

Implemented Get External Payment types

NA

NA

NA

{api_url}/v1/integrations/1/payment_types?view_id=a11f578a-1b81-4de0-8834-915f79e5362b&page=1&size=9

Implemented Get Payment Types

NA

NA

NA

{api_url}/api/Catalog/Guests/UserAppointments"

Endpoint used for fetching the appointment list in CX V3. In this RequestType defines the request type is Past(0), Upcoming(1) or all(2).

Add a new enum value for Pet appointments and request it in Query parameter "RequestType"

API should return Pet appointments.

NA

{api_url}/v1/guests/guest_id/entities/entity_id

When Entity is enabled for an organization and a guest has entities(ex: Pets), pet profile related APIs are introduced.

These are new APIs implemented

Update the guest entity

NA

{api_url}/v1/guests/guest_id/entities

When Entity is enabled for an organization and a guest has entities(ex: Pets), pet profile related APIs are introduced.

These are new APIs implemented

Get the list of entities for the guest

NA

{api_url}/v1/guests/guest_id/entities

When Entity is enabled for an organization and a guest has entities(ex: Pets), pet profile related APIs are introduced.

These are new APIs implemented

Create the new entity for the guest

NA

{api_url}/v1/integrations/1/payments_mapping?view_id=a11f578a-1b81-4de0-8834-915f79e5362b&page=1&size=5

Implement Get payments Mapping

NA

NA

NA

{api_url}/v1/forms/EB5D5983-20BF-4E61-ADD5-3FF1C941AE24/logs?owner_id=69CE803F-75ED-42A9-B894-976AC51067BD&center_id=34F7B069-1BCE-4F24-B9B2-F58EBBF768F0&log_type=1

New API to get custom form logs

New API to get custom form logs

Did this answer your question?