Download OpenAPI specification:
This API is documented in OpenAPI format. It's still a work in progress so please let us know about any issues at dev@bookio.com.
Token based authentication. Access to bookio API with specific channel assigned to the token.
Api keys are issued on request, there is not yet an automatic process, but will be available in the future.
| ErrorCode | Description |
|---|---|
| 10 | Generic validation error, errors field will give more information |
| 11 | Payment error, reservation cannot be marked as paid |
| 12 | Resource not found. |
| 20 | Invalid token or missing access rights |
| 30 | There is no capacity left |
| 40 | Duplicate reservation |
| 403 | You don't have enough permissions to access this endpoint |
| 404 | Not found |
| 409 | Conflict, resource already exists |
| 422 | Validation error |
| 666 | Unspecified internal error, this will be reported to us and we will look into it shortly |
Every request accepts parameter lang. Example: /api/v1/some-endpoint?lang=sk or /api/v1/some-endpoint?someParam=1&lang=en. Controls the language of texts. Unsupported locale will fallback to "en".
Returns a list of reservations by filter.
string Example: email=test@bookio.com Email of the reservee. | |
| offset | integer >= 0 Default: 0 Example: offset=50 Determines the offset within pagination. |
| limit | integer [ 0 .. 100 ] Default: 100 Example: limit=50 Limits the result set. |
| facilityId | number <int64> (Id) Example: facilityId=123 ID of the specified facility. |
| from | string <date> (Date) Example: from=2018-06-29 Look for reservation beginning this date. |
| to | string <date> (Date) Example: to=2018-06-29 Look for reservation ending this date. |
{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "pagination": {
- "total": 1234,
- "offset": 100,
- "limit": 100
}, - "reservations": [
- {
- "id": 123,
- "name": "John Audrey",
- "email": "alias@example.com",
- "phone": "+421944888777",
- "service": 123,
- "price": 200.05,
- "duration": 2,
- "created": "2018-06-29T12:00:00",
- "dateFrom": "2018-06-29T12:00:00",
- "dateTo": "2018-06-29T12:00:00",
- "cancelTime": "2018-06-29T12:00:00",
- "cancellationReason": "string",
- "facilityId": 123,
- "note": "string",
- "status": "CONFIRMED",
- "workers": [
- 123
]
}
]
}
}
}Returns a list of reservations by filter.
string Example: email=test@bookio.com Email of the reservee. | |
| offset | integer >= 0 Default: 0 Example: offset=50 Determines the offset within pagination. |
| limit | integer [ 0 .. 100 ] Default: 100 Example: limit=50 Limits the result set. |
| facilityId | number <int64> (Id) Example: facilityId=123 ID of the specified facility. |
{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "pagination": {
- "total": 1234,
- "offset": 100,
- "limit": 100
}, - "reservations": [
- {
- "id": 123,
- "name": "John Audrey",
- "email": "alias@example.com",
- "phone": "+421944888777",
- "course": 123,
- "created": "2018-06-29T12:00:00",
- "dateFrom": "2018-06-29T12:00:00",
- "dateTo": "2018-06-29T12:00:00",
- "cancelTime": "2018-06-29T12:00:00",
- "cancellationReason": "string",
- "facilityId": 123,
- "note": "string",
- "status": "CONFIRMED"
}
]
}
}
}Returns a list of reservations by filter.
| dateFrom | string <date> (Date) Example: dateFrom=2018-06-29 Date from. |
| dateTo | string <date> (Date) Example: dateTo=2018-06-29 Date to. |
| offset | integer >= 0 Default: 0 Example: offset=50 Determines the offset within pagination. |
| limit | integer [ 0 .. 100 ] Default: 100 Example: limit=50 Limits the result set. |
| facilityId | number <int64> (Id) Example: facilityId=123 ID of the specified facility. |
{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "pagination": {
- "total": 1234,
- "offset": 100,
- "limit": 100
}, - "blockedTimes": [
- {
- "id": 123,
- "groupId": 123,
- "dateFrom": "2018-06-29T12:00:00",
- "dateTo": "2018-06-29T12:00:00",
- "note": "string"
}
]
}
}
}{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "id": 123,
- "name": "Test facility",
- "code": "test-facility",
- "address": {
- "street": "Second street",
- "city": "Bratislava",
- "postcode": 82104,
- "country": {
- "name": "Slovakia",
- "code": "SVK"
}, - "gps": {
- "latitude": 48.152115,
- "longitude": 17.108769
}
}, - "contact": {
- "phone": "+421999888777",
- "email": "test@bookio.com",
}, - "billingDetails": {
- "name": "Peter",
- "surname": "Parker",
- "company": "Bookio",
- "address": {
- "street": "Second street",
- "city": "Bratislava",
- "postcode": 82104,
- "country": {
- "name": "Slovakia",
- "code": "SVK"
}, - "gps": {
- "latitude": 48.152115,
- "longitude": 17.108769
}
}, - "regNumber": 48798213,
- "vatNumber": 2014393920,
- "phone": "+421949888777",
- "email": "test@bookio.com",
- "iban": "SK33 0200 0000 0004 9999 9999"
}, - "openingHours": [
- {
- "from": "09:00",
- "to": "18:00",
- "weekday": 4
}
], - "giftCards": [
- {
- "name": "Poukazka",
- "note": "Some text",
- "price": 40,
- "currency": "EUR",
- "type": "CASH",
- "reservationCount": 1,
- "image": "imageUrl"
}
]
}
}
}{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "workers": [
- {
- "id": 123,
- "name": "Peter",
- "surname": "Parker",
- "email": "info@bookio.com",
- "phone": "+421949666777",
}
]
}
}
}{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "services": [
- {
- "id": 123,
- "type": "BELONGS_TO_WORKER",
- "name": "Peter",
- "note": "Parker",
- "category": {
- "id": 123,
- "name": "test category"
}, - "duration": 70,
- "timeBefore": 10,
- "timeAfter": 0,
- "orderType": "DIRECT",
- "paymentType": "FULL",
- "price": 30,
- "fixedPrice": true,
- "deposit": 15,
- "currency": "EUR",
- "prices": [
- {
- "name": "string",
- "price": 15
}
], - "assignedWorkers": [
- {
- "id": 123
}
], - "assignedItems": [
- {
- "id": 123
}
]
}
]
}
}
}Checks if customer is in the loyalty system
string Example: email=test@bookio.com Email of the reservee. | |
| bookioId | number <int64> (Id) Example: bookioId=123 Unique identifier |
| externalId | string Example: externalId=21312 |
{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "exists": true,
- "email": "test@bookio.com",
- "bookioId": 123,
- "externalId": "e5753691-e71c-415a-844e-74b76af39a9d",
- "externalCardId": "f5753691-e71c-415a-844e-74b76af39a9d",
- "nextBooking": {
- "date": "2018-06-29",
- "time": "18:00",
- "service": "Strihanie",
- "serviceEng": "Wellness",
- "duration": 30,
- "status": "CONFIRMED"
}
}
}
}Checks if customer has any near booking
string Example: email=test@bookio.com Email of the reservee. | |
| bookioId | number <int64> (Id) Example: bookioId=123 Unique identifier |
| externalId | string Example: externalId=21312 |
{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "nextBooking": {
- "date": "2018-06-29",
- "time": "18:00",
- "service": "Strihanie",
- "serviceEng": "Wellness",
- "duration": 30,
- "status": "CONFIRMED"
}
}
}
}Register customer in the loyalty system
| bookioId | number <int64> Unique identifier |
| externalId | string External bussiness id from external system |
| externalCardId | string Loyalty Card ID from external system |
| name | string Name of the customer |
| surname | string Surname of the customer |
| phone | string Phone of the customer |
string Email of the customer |
{- "bookioId": 123,
- "externalId": "141512",
- "externalCardId": "08ab382e-1162-4d35-8c5b-ab1064b1afc7",
- "name": "Test",
- "surname": "Testovy",
- "phone": "+421949888777",
- "email": "test@bookio.com"
}{- "result": {
- "success": true,
- "errors": [
- "string"
], - "data": {
- "created": true,
- "email": "test@bookio.com",
- "bookioId": 123,
- "externalId": "e5753691-e71c-415a-844e-74b76af39a9d",
- "externalCardId": "f5753691-e71c-415a-844e-74b76af39a9d"
}
}
}Webhook is setup to point to one API url. Operations are distinguished by type field. We are using only POST http request.
Based on the `type` field the structure of the Json will change.
All webhooks have maximum of 5 attempts (timeout, your api is down, etc ...).
Webhook functionality is issued on request, there is not yet an automatic process, but will be available in the future. Further you can find structures of the webhooks.
Create reservation object in webhook.
| type | string Unique webhook type. This will tell you what structure to parse. Type: |
object Main data holder. |
{- "type": "create_reservation",
- "data": {
- "id": 123,
- "name": "John Audrey",
- "email": "alias@example.com",
- "phone": "+421944888777",
- "service": {
- "id": 123,
- "name": "string"
}, - "price": 200.05,
- "duration": 45,
- "created": "2018-06-29T12:00:00",
- "dateFrom": "2018-06-29T12:00:00",
- "dateTo": "2018-06-29T12:00:00",
- "facilityId": 123,
- "note": "string",
- "status": "CONFIRMED"
}
}Edit reservation object in webhook.
| type | string Unique webhook type. This will tell you what structure to parse. Type: |
object Main data holder. |
{- "type": "modify_reservation",
- "data": {
- "id": 123,
- "name": "John Audrey",
- "email": "alias@example.com",
- "phone": "+421944888777",
- "service": {
- "id": 123,
- "name": "string"
}, - "price": 200.05,
- "duration": 45,
- "created": "2018-06-29T12:00:00",
- "dateFrom": "2018-06-29T12:00:00",
- "dateTo": "2018-06-29T12:00:00",
- "facilityId": 123,
- "note": "string",
- "status": "CONFIRMED"
}
}Cancel reservation object in webhook.
| type | string Unique webhook type. This will tell you what structure to parse. Type: |
object Main data holder. |
{- "type": "cancel_reservation",
- "data": {
- "id": 123,
- "cancelTime": "2018-06-29T12:00:00",
- "cancellationReason": "string",
- "facilityId": 123
}
}