Sixteen events leave the system the moment they happen, signed and in a format every automation tool understands. Four routes let outside software read your data. Nothing gets retyped by hand.
This is the one thing worth understanding before anything else on this page. The rest is detail.
The system reports outward the moment something happens. It does not wait to be asked. You give an address and pick the events, and the data packet arrives on its own, in the second the event occurred.
Outside software reads from the booking system when it needs to. You issue a key, and it asks: which appointments since yesterday, which services exist, which staff are active.
Each webhook listens to the ones you assign it. One address can take a single event, another all sixteen.
booking.createdNew bookingbooking.canceledBooking canceledbooking.completedBooking completedbooking.status_changedStatus changed, any statusbooking.confirmedClient confirmed attendancepayment.recordedPayment recordedwaitlist.joinedJoined the waiting listbooking.reminderReminder before the appointmentbooking.reminder2Second reminderbooking.no_showClient did not show upcustomer.debt_reminderUnpaid balance remindercustomer.review_requestReview requestcustomer.winbackLapsed clientcustomer.rebookTime to rebookcustomer.birthdayBirthday messagecustomer.loyaltyLoyalty rewardAn ordinary JSON message. This is the packet that goes out for a new booking.
POST to your URL X-PB-Event: booking.created X-PB-Signature: sha256=a3f1c8... Content-Type: application/json { "id": 1482, "reference": "3BB6844B", "status": "pending", "service": "Women's haircut", "staff": "Milica Jovanović", "date": "2026-07-24", "time": "17:30", "price": 2500, "amount_paid": 0, "customer": { "name": "Ana Petrović", "email": "ana@primer.rs", "phone": "+381 60 123 4567" } }
Both are invisible until they matter, and then they are the only thing that matters.
A webhook address is public. Without a signature, anyone who guesses it can push a fake booking into your spreadsheet.
Without this, you test an integration by booking an appointment with yourself and watching whether anything happened.
Works with any tool that accepts an HTTP request
For when outside software needs to ask, rather than wait to be told.
/auth/test
Checks whether the key is valid. The first thing any integration calls.
/api/appointments
Appointments with full client details. Filters by modification date, date range, status and row count.
/api/services
Service catalog: name, duration, price.
/api/staff
Staff catalog.
X-PB-API-Key or in the standard Authorization: Bearer form.Staff do not look at WordPress. They look at their phone. If the appointment is not there, for them it does not exist.
This asks for neither Zapier nor a developer. It asks for thirty seconds per person, once.
Integrations are pipes. What flows through them is configured by you, in a tool of your choosing.
Every paid one, with no cap on calls and no charge per event.
| Free | 1 service, 1 staff member |
| Single | Everything, 1 site |
| Business | Everything, multiple sites |
| Agency | Everything, for client sites |
For a webhook, yes. In Zapier or Make you create a step called a catch hook, you get an address, you paste it into the plugin and pick the events. Then you say what happens when a packet arrives: a Viber message, a row in a spreadsheet, a notification on your phone. Not one step asks you to write code. API keys do need someone who knows what they are doing, but most users will never open that screen.
Switch on a webhook for the reminder event and connect it to a tool that sends WhatsApp. The packet carries the name, phone, service, date, time and booking reference, so everything a message needs. The plugin still sends the email, so the client gets both, or you switch the email off. You pay for the messages to that tool, not to us, and that is why the license has no monthly charge.
That is what the signing secret is for. Someone who knows the address but not the secret cannot send a message that passes verification, because the recipient compares the signature against their own calculation. If you suspect the secret leaked too, change it in the plugin and at the recipient. The address does not need changing.
No. The packet goes out without waiting for a response, on a short timeout, so a client booking an appointment is not waiting on your Zapier. The single exception is the test button, which waits deliberately so it can show you the answer. If your server does not respond, the booking still completes normally.
Yes, and in three ways. The routes for appointments, services and staff return data as JSON. The client record has an export. The database sits on your hosting, so you can reach it directly whenever you want. There is no data lock-in, because the data is not with us, it is with you.
Integrations have no content of their own. They carry what the rest of the system produces.
Sixteen events leave on their own, signed, in the second they happen. The license is paid once, and the number of calls is never billed.