Vexar API

Bookings

Create and manage bookings as the profile owner. A booking has a status of pending, confirmed, completed or cancelled. Changing status to confirmed/cancelled notifies the visitor by email; completing a booking triggers a review request.

GET /api/v1/my-profile/bookings Auth

List bookings with optional filters.

ParamTypeInDescription
statusstringquerypending | confirmed | completed | cancelled
date_fromdatequeryYYYY-MM-DD
date_todatequeryYYYY-MM-DD
limitintqueryPage size (default 50)
offsetintqueryOffset (default 0)
Response
{
  "success": true,
  "bookings": [
    { "id": 12, "visitor_name": "Jane", "booking_date": "2026-07-01", "start_time": "10:00", "status": "confirmed", "price": 5000, "currency": "usd" }
  ],
  "total": 42
}
GET /api/v1/my-profile/bookings/grid Auth

Everything the calendar/grid view needs in one call: bookings plus schedule, overrides, services, settings, staff and stats.

ParamTypeInDescription
date_fromdatequeryYYYY-MM-DD
date_todatequeryYYYY-MM-DD
statusstringquery
product_idintqueryFilter by service/object
operator_idintqueryFilter by staff member
searchstringquerySearch by visitor
Response
{
  "success": true,
  "bookings": [ … ],
  "schedule": [ … ],
  "overrides": [ … ],
  "services": [ … ],
  "settings": { … },
  "staff": [ … ],
  "can_view_all": true,
  "stats": { "today": 2, "pending": 3, "upcoming": 7, "total": 42 }
}
GET /api/v1/my-profile/bookings/poll Auth

Lightweight change check — returns a timestamp that changes when bookings change. Use it to decide whether to refetch.

Response
{ "ts": 1717440000 }
GET /api/v1/my-profile/bookings/stats Auth

Summary counters.

Response
{
  "success": true,
  "stats": { "today": 2, "pending": 3, "upcoming": 7, "total": 42 }
}
POST /api/v1/my-profile/bookings Auth

Create a booking as the owner. For rentals send checkout_date instead of a single time.

Request body
{
  "product_id": 8,
  "operator_id": null,
  "booking_date": "2026-07-01",
  "start_time": "10:00",
  "duration_minutes": 60,
  "visitor_name": "Jane",
  "visitor_email": "[email protected]",
  "visitor_phone": "+1…",
  "visitor_note": "",
  "price": 5000,
  "currency": "usd"
}
Response
{ "success": true, "booking": { "id": 13, "status": "confirmed", … } }
PUT /api/v1/my-profile/bookings/{id}/status Auth

Change a booking status. Confirmed/cancelled emails the visitor; completed requests a review.

Request body
{ "status": "confirmed", "reason": "" }
Response
{ "success": true, "booking": { "id": 13, "status": "confirmed" } }
PUT /api/v1/my-profile/bookings/{id}/reschedule Auth

Move a booking to a new date/time (and optionally service/staff). Set send_notification to false to skip the email.

Request body
{
  "booking_date": "2026-07-02",
  "start_time": "11:00",
  "duration_minutes": 60,
  "product_id": 8,
  "operator_id": null,
  "send_notification": true
}
Response
{ "success": true, "booking": { … } }
POST /api/v1/my-profile/bookings/{id}/notify Auth

Send (or resend) the reschedule notification email to the visitor.

Response
{ "success": true }
Note: Prices are integers in the smallest currency unit (e.g. cents). 5000 with currency usd means $50.00.