Skip to content

Getting started

Environment

There is one environment, staging. It runs demo data and can be reset at any time.

URL
Resource API https://reserva.bojanlab.com/api
Auth API https://reserva.bojanlab.com/auth
Booking widget loader https://reserva.bojanlab.com/widget.js
Demo partner website https://demo-business.bojanlab.com

All examples on this site use these URLs. When a production environment exists, it will be added to this table and staging will stay available as a sandbox.

Demo data only

Staging contains generated demo businesses and accounts. Do not use real personal data there, and do not rely on IDs staying the same after a reset.

Read public data without a token

Searching businesses, reading their details and checking free slots does not need a token.

1. Find a business

GET /api/v1/search searches active businesses by name, category and service:

curl "https://reserva.bojanlab.com/api/v1/search?q=frizer&size=5"
{
  "content": [
    {
      "businessId": "2b187165-3c35-4d6f-9edf-a9ec7dc73afe",
      "businessName": "Novosadski Frizer",
      "categoryId": "a0000000-0000-0000-0000-000000000001",
      "city": "Novi Sad",
      "similarityScore": 0.39,
      "imageUrl": null
    }
  ],
  "size": 5,
  "page": 0,
  "totalElements": 1,
  "totalPages": 1
}

Pagination is zero-based (page, size). Other ways to find businesses are GET /api/businesses/search (filters), GET /api/businesses/nearby (coordinates) and GET /api/businesses/category/{categoryId}. Categories come from GET /api/business-categories.

2. Read locations, services and resources

BUSINESS=<businessId>
curl "https://reserva.bojanlab.com/api/businesses/$BUSINESS/locations"
curl "https://reserva.bojanlab.com/api/businesses/$BUSINESS/services"
curl "https://reserva.bojanlab.com/api/businesses/$BUSINESS/resources"
  • A location is a physical branch of the business (GET /api/businesses/{businessId}/locations).
  • A service is what a customer books, with its duration rules (GET /api/businesses/{businessId}/services).
  • A resource is who or what performs the service, for example an employee or a chair (GET /api/businesses/{businessId}/resources).

3. Check free slots

GET /api/resources/{resourceId}/slots returns fixed-length slots of a resource for one service in a date range. Dates use yyyy-MM-dd:

curl "https://reserva.bojanlab.com/api/resources/<resourceId>/slots?serviceId=<serviceId>&from=2026-11-05&to=2026-11-05"
[
  { "startTime": "2026-11-05T09:00:00", "endTime": "2026-11-05T09:30:00", "status": "AVAILABLE" },
  { "startTime": "2026-11-05T09:30:00", "endTime": "2026-11-05T10:00:00", "status": "CONFIRMED" }
]

Only AVAILABLE slots can be booked. PENDING and CONFIRMED slots are taken. Times are local times of the business location, without a time zone offset.

Book, list and cancel: you need a token

Creating, reading and cancelling reservations is done for a user, so these calls need an access token:

Who books Endpoints How to get a token
A signed-in Reserva user POST /api/resources/{resourceId}/reservations, GET /api/reservations, POST /api/resources/{resourceId}/reservations/{id}/cancel Authorization code flow
A partner application, for its own user POST /api/client-applications/reservations, GET /api/client-applications/reservations Token exchange

Read Authentication next. If you are building a website for a business, the booking widget does all of this for you.

Getting access

Partner registration (a client application, its allowed origins and the business consent) is done by a Reserva administrator during the preview. There is no self-service sign-up yet.