Integration with the Phorest API requires your own development team for setup. Third-party software providers wishing to partner with Phorest might be subject to integration charges.
The Phorest API does not currently support webhooks. Instead, you can regularly check for updates by polling the API.
URLs
EU: https://platform.phorest.com/third-party-api-server/api/business/
US/AUS: https://platform-us.phorest.com/third-party-api-server/api/business/
DEV environment: https://api-gateway-dev.phorest.com/third-party-api-server/api/business/
Retrieving the list of appointments and checking the activationState will tell you whether it is confirmed or not, you can use the endpoint
http://developer.phorest.com/#!/Appointments/updateAppointment and use key/value "activationState": "ACTIVE"
activationState: ACTIVE, RESERVED, CANCELED
The bookings are in UTC time (i.e for a salon based in Canada - If a booking is made at 13:30 it needs to use the time 18:30 because Canada is 5 hours behind).
Here is the full list of issues when trying to book an appointment with the API:
- 'STAFF_UNQUALIFIED'
The staff you have tried to use is not qualified for the service you are using.
- 'STAFF_REQUESTED’
When the client wants to request a specific staff member for the appointment.
Seen on those endpoints:
- http://developer.phorest.com/#!/Appointments/getAppointments
- http://developer.phorest.com/#!/Appointments/confirmAppointments
- http://developer.phorest.com/#!/Appointments/updateAppointment
- http://developer.phorest.com/#!/Appointments/checkInAppointment
- http://developer.phorest.com/#!/Appointments/findAvailableAppointmentTimes
- http://developer.phorest.com/#!/Booking/createBooking
Example:
When you create an appointment you can request a staff member (this sets staffRequest to true (see screenshot). So say a client wants her hair cut with Lisa so she requests Lisa. If you try to move this appointment to a different staff member later(move it to staff John) then you’ll get STAFF_REQUESTED error because the client/user requested the original staff member(Lisa) not the new staff remember you are moving the appointment to.
When the appointment time moves to another time on the same day or another time on different days the error comes up. The error will only happen for changing staff when clients have already requested that staff member. Moving to a different day/time could give you one of these errors:
- 'CLIENT_ALREADY_BOOKED_THIS_TIME'
- 'STAFF_NOT_WORKING' = staff not rostered for the day
- 'STAFF_DOUBLE_BOOKED' = to find times when staff are not booked - You can check the /appointment endpoint to see when staff are booked. Or just use http://developer.phorest.com/#!/Appointments/findAvailableAppointmentTimes
- 'EXCEEDED_ROOM_CAPACITY' = there is no more physical space in the treatment room - Check machines and rooms are correct for each service http://developer.phorest.com/#!/Service/getBranchServices
- 'MACHINE_DOUBLE_BOOKED' = there are no more machines available for treatments - Check machines and rooms are correct for each service http://developer.phorest.com/#!/Service/getBranchServices
- 'ROOM_UNSUITABLE' = room is not suitable to the type of treatment - Check machines and rooms are correct for each service http://developer.phorest.com/#!/Service/getBranchServices
- 'MACHINE_UNSUITABLE'
- 'SERVICE_ALREADY_BOOKED_THIS_DAY'
- 'INTERNET_BOOKING_ALREADY_BOOKED'
- 'SERVICE_ALREADY_BOOKED_THIS_DAY', = client is already booked for the same day
- 'CLIENT_ALREADY_BOOKED_THIS_TIME' = client is already booked for the slot appointment for the same time - You can check the /appointment endpoint or /client-service-history endpoint
- 'STAFF_NOT_WORKING' = staff not rostered for the day
- 'MIN_DAYS_BETWEEN_SESSIONS_NOT_EXCEEDED'
- 'MAX_DAYS_BETWEEN_SESSIONS_EXCEEDED'
- 'SPECIAL_OFFER_BEFORE_START_DATE'
- 'SPECIAL_OFFER_AFTER_END_DATE'
- 'SPECIAL_OFFER_NOT_ALLOWED_TIME'
- 'SPECIAL_OFFER_MAX_CONCURRENT_EXCEEDED'
- 'SPECIAL_OFFER_MAX_PER_DAY_EXCEEDED'
- ' SPECIAL_OFFER_STAFF_EXCLUDED'
ENDPOINTS WHEN THOSE ERRORS CAN COME UP
Check staff are not disqualified for a service http://developer.phorest.com/#!/Service/getBranchServices
Check machines and rooms are correct for each service http://developer.phorest.com/#!/Service/getBranchServices
Check Special offer settings before creating a booking http://developer.phorest.com/#!/Service_Special_Offers/getServiceSpecialOffersCheck available appointment times before booking http://developer.phorest.com/#!/Appointments/findAvailableAppointmentTimes
Method: POST > Create Client for a business
Endpoint: /third-party-api-server/api/business/{businessId}/client
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/client
Note: To create a client, remove client_id from the body request.
Body request
{
"address": {
"city": "Toronto",
"country": "Canada",
"postalCode": "",
"state": "Toronto",
"streetAddress1": "SomeStreet",
"streetAddress2": "SomeTown"
},
"archived": false,
"banned": false,
"birthDate": "1975-08-01",
"clientCategoryIds": [
"sV-l8hImJQDBdpFGFGB1bA"
],
"clientSince": "2021-08-01T14:21:48.487Z",
"createdAt": "2021-08-01T14:21:48.487Z",
"creditAccount": {
"creditDays": 5,
"creditLimit": 502.32,
"outstandingBalance": 0
},
"deleted": false,
"email": "test2@home.com",
"emailMarketingConsent": true,
"emailReminderConsent": true,
"firstName": "Eamonn2",
"gender": "MALE",
"landLine": 35318345657,
"lastName": "Phorest",
"mobile": 189654879229145,
"notes": "sample",
"smsMarketingConsent": true,
"smsReminderConsent": true,
"updatedAt": "2021-10-01T14:21:48.487Z",
"version": 1
}
Response
{
"clientId": "igK6P6lu40g3UeT_zhmJhw",
"version": 1,
"firstName": "Amanda",
"lastName": "Doe",
"mobile": "1234871229345",
"landLine": "35312345667",
"email": "test@phorest.com",
"createdAt": "2021-10-04T09:39:46.000Z",
"updatedAt": "2021-10-04T09:39:46.000Z",
"address": {
"streetAddress1": "Test",
"streetAddress2": "Test2",
"city": "Toronto",
"state": "Toronto",
"postalCode": "",
"country": "Canada"
},
"birthDate": "2021-10-01",
"clientSince": "2021-10-01T14:21:48.000Z",
"gender": "FEMALE",
"notes": "sample",
"smsMarketingConsent": true,
"emailMarketingConsent": true,
"smsReminderConsent": true,
"emailReminderConsent": true,
"creditAccount": {
"outstandingBalance": 0,
"creditDays": 0,
"creditLimit": 500.00
},
"archived": false,
"deleted": false,
"banned": false,
"clientCategoryIds": []
}
Client created on Phorest System
Method: PUT > Update Client for a business
Endpoint: /third-party-api-server/api/business/{businessId}/client/{clientId}
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/client/<<insert client_id here>>
Note:- It is important to use properly the "version" key. For the versioning, you put what the current version is in the body and then update it, for the next one you'll have to increment + 1 (for instance, looking at the screenshot below, if you want to make a new request, you need to use "version": 17 on the body request).
- There is no need to add the creatingBranchId on the body request in order to update the client. It's a creatingBranchId so it's just the branch the client is created at. Clients are on a business level.
Body request
{
"clientId": "lHTy5IXdYz5F1-d9zCdelQ",
"creatingBranchId": "tQHEfFVAijm4MzlI3gM9Gg",
"email": "test@phorest.com",
"firstName": "Dmitry",
"lastName": "Doe",
"mobile": 871229348,
"version": 16
}
Response
{
"clientId": "lHTy5IXdYz5F1-d9zCdelQ",
"version": 17,
"firstName": "Dmitry",
"lastName": "Doe",
"mobile": "871229348",
"landLine": "",
"email": "test@phorest.com",
"createdAt": "2021-04-16T10:28:41.000Z",
"updatedAt": "2021-11-03T15:15:29.000Z",
"address": {
"streetAddress1": "",
"streetAddress2": "",
"city": "",
"state": "",
"postalCode": "",
"country": ""
},
"clientSince": "2021-04-16T10:28:41.000Z",
"gender": "FEMALE",
"notes": "",
"smsMarketingConsent": false,
"emailMarketingConsent": false,
"smsReminderConsent": true,
"emailReminderConsent": true,
"preferredStaffId": "nfyCJWf4KYalrmI7H2JwYw",
"creditAccount": {
"outstandingBalance": 10.00,
"creditDays": 0,
"creditLimit": 2345.00
},
"creatingBranchId": "tQHEfFVAijm4MzlI3gM9Gg",
"archived": false,
"deleted": false,
"banned": false,
"clientCategoryIds": [
"GjU9lkUGvysJwI9zxJYt8w"
]
}
Client updated on Phorest System
Note: Client Course is not the same as Course. A Course is the package to be sold, whereas a Client Course is 1 Course purchased and assigned to a client.
Method: GET > Get paginated list of client courses for a business. Client courses may be filtered by client_id
Endpoint: /third-party-api-server/api/business/{businessId}/clientcourse
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert businessId here>>/clientcourse?includeArchived=true
Note: To GET archived salons use the flag includeArchived=true
Note: Client Course is not the same as Course. A Course is the package to be sold, whereas a Client Course is 1 Course purchased and assigned to a client.
Method: PUT > Update a Client Course for a business
Endpoint: /third-party-api-server/api/business/{businessId}/clientcourse/{clientCourseId}
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert businessId here>>/clientcourse/<<insert clientCourseId here>>
Body request:
{
"expiryDate": "2022-11-21",
"archived":false,
"clientCourseId": "KsXAtIlJYqUi7MjaqwiIrg"
}
Method: POST > Create CSV Export Job for a business
Endpoint: /third-party-api-server/api/business/{businessId}/branch/{branchId}/csvexportjob
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/branch/<<insert branch_id here>>/csvexportjob
Note:
- You can pull all transactions for a branch over a date range. Get the data that is used to generate the Phorest Sales Transactions Report (found in Manager -> Reports -> Additional Reports -> Sales Transactions).
- This request will generate the jobId
- The Phorest API can be used to extract the following jobs:
- TRANSACTIONS_CSs - containing all transaction data
- SUNDRIES_CSV - Sundries is just petty cash sales in the salon
- DATEV_CSV - Datev is for exporting financial data in Germany to import into accountancy software
- CLIENT_COURSES_CSV - Client course data
Body request
Note: This request will generate the jobID
{
"failureReason": "No records found",
"finishFilter": "2021-10-21",
"finished": "2021-10-21T13:37:13.836Z",
"jobId": "hui", (not necessary to post as it will create the jobId anyway)
"jobStatus": "DONE",
"jobType": "CLIENT_COURSES_CSV",
"startFilter": "2021-10-21",
"started": "2021-10-21T13:37:13.836Z",
"succeededRows": 492,
"tempCsvExternalUrl": "https://eu1-mem.s3-eu-west-1.amazonaws.com/mem-prd/business/eTC3QY5W3p_HmGHezKfxJw/csvexport",
"totalRows": 530
}
Response
{
"jobId": "vfvLSzpUP2dIvwR6kGw8Fg",
"jobType": "CLIENT_COURSES_CSV",
"jobStatus": "SCHEDULED",
"startFilter": "2021-10-21",
"finishFilter": "2021-10-21"
}
Method: GET > Return a csv export job
Endpoint: /third-party-api-server/api/business/{businessId}/branch/{branchId}/csvexportjob/{jobId}
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/branch/<<insert branch_id here>>/csvexportjob/<<insert job_id here>>
Response
{
"jobId": "GBitzqPF9io0SCSZIFiiIg",
"jobType": "CLIENT_COURSES_CSV",
"jobStatus": "DONE",
"finished": "2021-10-21T14:27:36.000Z",
"startFilter": "2021-10-21",
"finishFilter": "2021-10-21",
"totalRows": 45,
"succeededRows": 45,
"tempCsvExternalUrl": "https://eu1-mem.s3-eu-west-1.amazonaws.com/mem-prd/business/lX2aRtkmatLBSjcoU-Y2nQ/csvexport/GBitzqPF9io0SCSZIFiiIg?response-cache-control=public%2C%20max-age%3D1799&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEGYaCWV1LXdlc3QtMSJHMEUCIH1YGvWCbu2oNTz%2FWicXUiFVik2N2MlUU5tX7AwKrpzEAiEAm%2FMoL4u%2BfrW5ZnoNdu7In8RKDonRD44JtBNW7y%2F6hIMq7wMI7%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2MTMyMjc4MDEwNzYiDBAd3NgRHywlpbls8SrDA2c8%2FjjcHDncV3a%2B9tuBYHMZU0NvXV8iL79RBLApqGjqjX%2BX%2FECitaWM3UCJ5F16ggdKO%2Beh1hLRJ9fqrS1yWiPoLPSUQkwOQ%2BdXRf2cIL1mFw7r%2F5VuyTG7i6L7htUjNwze7VX%2Fxw7uzj3WXofZI0r68AH8rbq5097C%2F482%2B7Uhm7o0vTRs%2FUcomGAC5D8KBtrFC10D13QF%2F3EbNj18o95VDgSDPMXK9ezvj0geOoODULRuCpuQOwQfBrBDgH0FRJ7u9QwoQqBsuKNUBIsbLYoZVihskoU8JT7DQNNw7d2RxiCpjvB9i%2FLLU2t9FCH5oyLe8QU8uKkKemusCN63QGfzOASUElepu5kD%2Bd2NPEuQ2Fi8UHuvD34gBgF3GjsEykU1MukmPL5Aku6nxA71nYeBLuWRfv0fNY1%2FjNuh7cvSpoG%2B%2F6vbzdA%2Bf1a6ktH8zMMyNucjna8DJ%2Bvl2AoReY7PsWr%2BfcOsAi%2FmP81fFc7afU3VeeaEM60ycSRXUqEPuD06UHr05KBHzbBL83YE%2Bs2O4lumvyL5YipnAYHHwYuMptbu%2F%2BJdEVVlC2Ur7gvYwlTAJO%2FfspgBK9EoTb5c89p7VrIwq%2BbFiwY6pQErqeaGrGTKgWIXChqVYuqORs%2B5S9IbJtD3fgFXPF%2BFGvTHFDpj4%2Fhh3BZtt0OvbRueauH5KY4nQNHOzohECrowxR34Sv6dIcA3ZoWfSITmv%2BzNkJL812d6e5qndtJgNb9ib%2FECVdHoi5cqJ%2F1%2B%2Bz%2BtpTKJCoJAKMqCfVO4LwGitcB3qR813HcCzcJD8rtcwWbjdMBopkktVp%2B7Obt2oN4SGaIhI48%3D&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20211021T142757Z&X-Amz-SignedHeaders=host&X-Amz-Expires=1799&X-Amz-Credential=ASIAY5RZZVH2MUC3HSUO%2F20211021%2Feu-west-1%2Fs3%2Faws4_request&X-Amz-Signature=96a87a8db7185deec157096ba5cca9e118550a0116b381e11b0282945f363967"
}
- “ Is it possible to synchronise product stock in the Phorest system with the client website store?” The client wants that stock is deducted from their website if a sale is made in-salon and vice versa".
- " Can you send me further instructions on which API you'd like me to add to the WordPress Woocommerce cart for automatic inventory updates? What would be the best/simplest way to do so with your particular system? Many companies have installation plug-ins that install the connections automatically."
- " One of the key things we are trying to achieve is inventory sync between Phorest and Shopify. Essentially when someone purchases a product through the website that the inventory is depleted correctly and the sale is associated with that customer's record in Phorest.
To update the stock on the client website and in the Phorest system you can build something using the products endpoint and add the correct product and create a sale using the purchase endpoint
The value of the productId key on the product endpoint /third-party-api-server/api/business/{businessId}/branch/{branchId}/product is what you post as value for the
branchProductId key in the body of the endpoint the purchase endpoint /third-party-api-server/api/business/{businessId}/branch/{branchId}/purchase .
To automatically subtract from the stock, the quantity key needs to be supplied.
Please see the link below for more information: Integrating 3rd Party E-Commerce Solutions
- " We would love to be able to use the store feature but without having a drop-down for sizes, it will not work. Be it sizes for hair care products or clothing, we are not going to list the same thing 5 times because of the different sizes, all with the same picture. Now if we have it integrated with the API will that require us to have it done per item or will that integrate all of our inventory at once?"
You need a developer to build something using the product endpoint /third-party-api-server/api/business/{businessId}/branch/{branchId}/product . When a person selects a size they could search and add the correct product and create a sale on the purchase endpoint /third-party-api-server/api/business/{businessId}/branch/{branchId}/purchase .
Method: POST > Create a purchase associated with a branch
Endpoint: /third-party-api-server/api/business/{businessId}/branch/{branchId}/purchase
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/branch/<<insert branch_id here>>/purchase
Note:
- The series/courses cannot be purchased using a future date.
- Changing the purchase date on the API request won’t move the actual purchase.
- You’ll also need to change the "number" key: "HGiomh6k90GJVFDYHJ", for each request. Just change the number to something random.
- The Phorest System has a date picker in the client series/courses section which allows you to set the purchase date to any date, this date picker only sets a purchase date on client series/courses but it doesn’t actually move the purchase date. Clients are still going to be charged on the date of the purchase.
Body Request
{
"number": "HGiomh6k90GJVFDYHJ",
"clientId": "wR73bNIyT8M6KLORmnDZnw",
"payments": [{
"amount": 800.0,
"paymentTypeId": "1tXBjwGxQ3gACGVxpgjoXg",
"type": "CREDIT"
}],
"items": [{
"courseId": "JL_8MDctZVqj9BDyMPlcDA",
"price": 800.0,
"staffId": "j45taiPxpytBrd3CTZk4vw",
"quantity": 1
}]
}
Response
{
"purchaseId": "bPc_0c283ET1ra8cloj9gQ",
"number": "HGiomh6k90GJVFDYHJ",
"transactionNumber": "434",
"clientId": "wR73bNIyT8M6KLORmnDZnw",
"payments": [
{
"paymentId": "zkMrzDvPgTqkVAgph_xjig",
"type": "CREDIT",
"amount": 800.00
}
],
"items": [
{
"purchaseItemId": "7Urc_G2K2ZwyimIlPWhfKQ",
"description": "Unlimited Membership",
"price": 800.00,
"courseId": "JL_8MDctZVqj9BDyMPlcDA",
"staffId": "j45taiPxpytBrd3CTZk4vw",
"details": {
"totalAmount": 800.00,
"taxAmount": 0.00,
"taxIncluded": false,
"taxRates": [
{}
]
},
"childPurchaseItems": [
{
"purchaseItemId": "J9tgQ6GusnAbV9UqRSZJtQ",
"description": "Unlimited Membership - Blow Dry",
"price": 800.00,
"staffId": "j45taiPxpytBrd3CTZk4vw",
"details": {
"totalAmount": 800.00,
"taxAmount": 0.00,
"taxIncluded": false,
"taxRates": [
{
"name": "Sales Tax",
"rate": 0.0000
}
]
},
"childPurchaseItems": [],
"quantity": 1
}
],
"quantity": 1
}
],
"details": {
"totalAmount": 800.00,
"taxAmount": 0.00,
"changeAmount": 0.00,
"taxes": [
{
"taxAmount": 0.00,
"taxRate": {
"name": "Sales Tax",
"rate": 0.0000
}
}
]
}
}
For all custom payment types (example:website), you can use payment type “OTHER" as value for "type" key.
"payments":[
{
"amount":47.00,
"customPaymentTypeId":"ZlkRULCLPKeowif7_tViJw",
"customTypeCode":"Web",
"customTypeName":"Website",
"paymentId":"NA",
"type":"OTHER"
}
]
When you create a voucher with the API it’s like it is a manually added voucher so there won’t be a sale. It will actually show in the voucher history as manually added. There isn’t really a way to have it recognised for tax with the API, the salon would need to track manually added vouchers (or vouchers created by the API) separately.
You can’t create a purchase for a voucher with the API as the purchase endpoint http://developer.phorest.com/#!/Purchase/createPurchaseForBranch only works with appointments, products and courses.
At the moment the only way to have it registered as sales in Reports is to use our online voucher widget to register the sales on the report in Phorest. How do I sell Gift Cards/Vouchers online?
Method: POST > Create Voucher for a business
Endpoint: /third-party-api-server/api/business/{businessId}/voucher
Postman URL: https://platform.phorest.com/third-party-api-server/api/business/<<insert business_id here>>/voucher
Note: The developer can create vouchers with any serial they want. Vouchers created using the API will appear as Manually Added because they won’t have a sale assigned to them.
Body request
{
"clientId": "r5LY_u0plgdjsL_przAC0w",
"creatingBranchId": "IJeCi6jbq1WIFOkv8wV4XQ",
"expiryDate": "2022-06-10T08:06:50.728Z",
"issueDate": "2021-06-10T08:06:50.728Z",
"originalBalance": 123.12,
"remainingBalance": 23.12,
"serialNumber": 123457,
"voucherId": "ab-123"
}
Method: GET Voucher by Id
Endpoint: /third-party-api-server/api/business/{businessId}/voucher/{voucherId}
Postman: https://platform.phorest.com/third-party-api-server/api/business/r3j_ru6d71MKJAUk6oZ05w/voucher/3lXt9-ZVb4BaxyrNU0Iz4g
Response
{
"voucherId": "3lXt9-ZVb4BaxyrNU0Iz4g",
"serialNumber": "123457",
"issueDate": "2021-06-10T08:06:51.000Z",
"expiryDate": "2022-06-10T08:06:51.000Z",
"clientId": "r5LY_u0plgdjsL_przAC0w",
"creatingBranchId": "IJeCi6jbq1WIFOkv8wV4XQ",
"originalBalance": 123.12,
"remainingBalance": 123.12
}
Q&A's
" In general, our app processes SQS message sent when purchase is made. Such message contains JSON payload including “transactionId”, e.g. "transactionId":”47208”. I’ve noticed, that this parameter isn’t unique. There are SQS messages sent for other purchases with the same “transactionId”. We were using this parameter before to filter out incoming SQS purchases originating from our API calls to Phorest, so that we don’t have duplicated orders. Is there any unique parameter we could rely on?
When making "post /api/business/{businessId}/branch/{branchId}/purchase” request, Phorest API returns the following data:
"purchaseId": "lLgBszR0rFFPhQe6J_UFcw",
"transactionNumber": 23157
As I understand “transactionNumber” is the same as “transactionId” from SQS message. Is there a way to fetch “purchaseId”, which seems like a unique value? It’s missing in SQS message and I cannot find any API method to get order / purchase details?"
The transactionId is unique for each branch. So there might be the same id’s if a business has two branches. In order to tell the purchases apart is by using the transactionId and the branchId.
"We have a question regarding the operation of one of your api endpoints:
https://developer.phorest.com/#!/StaffWorkTimeTables/getStaffWorkTimeTables.
The api is documented as paginated but during our tests we noticed that it return always all the values, without taking into consideration the pagination parameters provided in the query."
Examples:
With size=100 and page=1
The totalPages value changes based on size, but everything else doesn’t.
{
{
"_embedded": {
“workTimeTables: [ … ]
},
"page": {
"size": 247,
"totalElements": 247,
"totalPages": 3,
"number": 0
}
}
This instead without passing any pagination parameter:
{
"_embedded": {
“workTimeTables: [ … ]
},
"page": {
"size": 247,
"totalElements": 247,
"totalPages": 13,
"number": 0
}
}
We don't support pagination for https://developer.phorest.com/#!/StaffWorkTimeTables/getStaffWorkTimeTables endpoint and it always returns all records for a given date range.
"Can we use the API to upload images by using the Booking endpoint?"
Currently we don't offer any way to add images via the API. A workaround might be for you to host your images somewhere of your choosing and include the link to the image into the appointment notes: https://developer.phorest.com/#!/Booking/appendNoteToBooking.
"Can we extract sales data so we can extract it into Xero using their API?"
The Phorest API can be used to extract the following jobs:
- TRANSACTIONS_CSs - containing all transaction data
- SUNDRIES_CSV - Sundries is just petty cash sales in the salon
- DATEV_CSV - Datev is for exporting financial data in Germany to import into accountancy software
- CLIENT_COURSES_CSV - Client course data
An example of using this functionality to extract Transaction data:
- Use this endpoint :https://platform.phorest.com/third-party-api-server/api/business/{==== BUSINESS_ID HERE ====}/branch/{=== BRANCH_ID HERE ====}/csvexportjob
Include this in the body of the request (Enter your own dates):
{
"finishFilter": "2021-10-21",
"jobType": "TRANSACTIONS_CSV",
"startFilter": "2021-10-17"
}
This will return a JobId example response:
{
"jobId": "-__UUYJak1Mh1Slv2uRN0A",
"jobType": "TRANSACTIONS_CSV",
"jobStatus": "SCHEDULED",
"startFilter": "2021-10-17",
"finishFilter": "2021-10-21"
}
Use that id in the following Get Request: https://platform.phorest.com/third-party-api-server/api/business/{==== BUSINESS_ID HERE ====}/branch/{=== BRANCH_ID HERE ====}/csvexportjob/{==== jobId Here ====}
The response provides a link to the csv data.
" I am trying to find out whether we can manage online bookings on our website with Phorest. Is it integratable with WordPress? Or how does it usually work?"
You can integrate Phorest and add the Online Booking feature to your own website. Please see this link explaining How do I set up Online Booking on my website? Here you can find more info on How to embed the booking widget into a responsive website
"How do I link Phorest up to Shopify"
Phorest does not support integration with Shopify. Phorest Online Store syncs straight with your salon stock and your clients. You can find the Online Store FAQs by click here.
Phorest supports integration with Xero & Quickbooks, for more information click here.