Tehnička API specifikacija
Dobrodošli na portal za programere. GoST365 omogućava jednostavnu integraciju rezervacionog kalendara i formi na bilo kom sajtu (WordPress, Webflow, React, PHP ili statički HTML).
Autentifikacija
Svaki API zahtev mora biti poslat preko HTTPS protokola i mora sadržati vaš javni API ključ u zaglavlju (header-u) zahteva. API ključ se generiše od strane Super Admina u Control Panelu i ima format Stripe ključa (`gost365_live_...`).
Podržana zaglavlja:
CORS & Whitelist Zaštita
Kako bi se sprečilo da neko zloupotrebi vaš javni API ključ na drugom sajtu, GoST365 vrši striktnu proveru mrežnog porekla zahteva (**CORS**).
Rate Limiting (Ograničenje)
U produkciji je aktivna zaštita od preopterećenja koja dozvoljava maksimalno 100 zahteva u minuti po jedinstvenoj IP adresi. Ukoliko pređete limit, API vraća statusni kod `429 Too Many Requests`.
API Reference: Jedinice
Dohvatite smeštajne jedinice klijenta i njihove rezervisane termine.
Primer odgovora (200 OK) — odaberi tip jedinice
Smještaj
Vozila
Oprema
{
"success": true,
"data": [
{
"id": "8f7e6d5c-4b3a-2a19-0e9d-8c7b6a5f4e3d",
"name": "Apartman Morski Konjic",
"type": "Apartman",
"billing_mode": "nightly",
"description": "Luksuzan studio sa pogledom na more.",
"address": "Bulevar Plaže 12, Budva",
"base_price": 75,
"check_in": "14:00",
"check_out": "10:00",
"amenities": ["wifi", "ac", "parking", "pool"],
"details": {
"max_guests": 4,
"bedrooms": 2,
"bathrooms": 1,
"area_size": 65,
"floor": "2. sprat"
},
"images": ["https://sajt.com/slika1.jpg"],
"pricing_config": { "base_price": 75, "currency": "EUR", "tiers": [], "seasons": [] },
"availability_blocks": [
{ "start_date": "2026-07-01", "end_date": "2026-07-08", "status": "confirmed" },
{ "start_date": "2026-07-15", "end_date": "2026-07-20", "status": "pending" }
]
}
]
}Napomena: availability_blocks sadrži sve zauzete termine sa statusima confirmed i pending — koristite ih za blokiranje datuma na kalendaru vašeg sajta.
API Reference: Rezervacije
Pošaljite upit ili direktnu rezervaciju sa vašeg sajta u Dashboard.
Primer Request Body — odaberi tip jedinice
Smještaj
Vozila
Oprema
{
"unit_id": "8f7e6d5c-4b3a-2a19-0e9d-8c7b6a5f4e3d",
"start_date": "2026-07-01",
"end_date": "2026-07-08",
"guest_name": "Jovan Jovanović",
"guest_email": "jovan.jovanovic@email.com",
"guest_phone": "+381641234567",
"adults_count": 2,
"children_count": 1,
"infants_count": 0,
"notes": "Molimo za tihu sobu i krevetac za bebu."
}Opis Polja (JSON Body)
| Polje | Tip | Obavezno | Opis |
|---|---|---|---|
| unit_id | UUID | Da | Jedinstveni ID apartmana iz GET /units |
| start_date | String (YYYY-MM-DD) | Da | Datum dolaska gosta |
| end_date | String (YYYY-MM-DD) | Da | Datum odlaska gosta |
| guest_name | String | Da | Ime i prezime gosta |
| guest_email | String | Da | Kontakt email adresa gosta |
| guest_phone | String | Ne | Kontakt telefon gosta |
| guests_count | Integer | Ne (podr. zbir) | Ukupan broj osoba (zbir odraslih, dece i beba) |
| adults_count | Integer | Ne (podr. 1) | Broj odraslih osoba |
| children_count | Integer | Ne (podr. 0) | Broj dece (2-17 godina) |
| infants_count | Integer | Ne (podr. 0) | Broj beba (do 2 godine) |
| notes | String | Ne | Napomena gosta |
Odgovor pri uspešnom kreiranju (201 Created)
{
"success": true,
"booking_id": "7a8b9c0d-e1f2-3a4b-5c6d-7e8f9a0b1c2d",
"message": "Booking created successfully"
}Greške i Statusni Kodovi
- 400 Nedostaju obavezna polja ili cenovnik za dati apartman nije ispravno konfigurisan.
- 401 API ključ nedostaje ili je nevažeći.
- 403 Nalog je suspendovan ili domen sajta sa kog šaljete upit nije dodat na CORS listu u Control Panelu.
- 409 Konflikt preklapanja: Neko je u međuvremenu već rezervisao te datume. Sprečava overbooking.
Schema po Tipu Jedinice
Polje details u odgovoru API-ja sadrži specifične podatke za svaki tip jedinice. Polje billing_mode govori programeru koji UI prikazati korisniku.
Apartman, Soba, Kuća
Date range picker — datum dolaska / odlaska
Auto, Šator, Ostalo
Date range picker — datum preuzimanja / vraćanja
Kvad, Motor, Bicikl, Plovilo, Bazen
Jedan datum + vremenski period (hh:mm)
Smještaj
Polja u details
| Polje | Tip |
|---|---|
| max_guests | number |
| bedrooms | number |
| bathrooms | number |
| area_size | number |
| floor | string |
Amenities IDs
Primjer details objekta
{
"max_guests": 4,
"bedrooms": 2,
"bathrooms": 1,
"area_size": 65,
"floor": "2. sprat"
}Polja u details
| Polje | Tip |
|---|---|
| max_guests | number |
| beds | number |
| bathrooms | number |
| area_size | number |
| floor | string |
Amenities IDs
Primjer details objekta
{
"max_guests": 2,
"beds": 2,
"bathrooms": 1,
"area_size": 22,
"floor": "3. sprat"
}Polja u details
| Polje | Tip |
|---|---|
| max_guests | number |
| bedrooms | number |
| bathrooms | number |
| area_size | number |
| floors | number |
Amenities IDs
Primjer details objekta
{
"max_guests": 8,
"bedrooms": 3,
"bathrooms": 2,
"area_size": 150,
"floors": 2
}Vozila
Polja u details
| Polje | Tip |
|---|---|
| brand_model | string |
| manufacture_year | number |
| registration_plates | string |
| seats | number |
| transmission | string |
| fuel_type | string |
| engine_power | string |
Amenities IDs
Primjer details objekta
{
"brand_model": "Yamaha Raptor 350",
"manufacture_year": 2022,
"registration_plates": "KO 123-AB",
"seats": 1,
"transmission": "manual",
"fuel_type": "petrol",
"engine_power": "350cc"
}Polja u details
| Polje | Tip |
|---|---|
| brand_model | string |
| manufacture_year | number |
| registration_plates | string |
| transmission | string |
| fuel_type | string |
| engine_power | string |
Amenities IDs
Primjer details objekta
{
"brand_model": "Honda CB500F",
"manufacture_year": 2021,
"registration_plates": "BG 456-CD",
"transmission": "manual",
"fuel_type": "petrol",
"engine_power": "500cc"
}Polja u details
| Polje | Tip |
|---|---|
| bike_type | string |
| frame_size | string |
| speeds | number |
| manufacture_year | number |
Amenities IDs
Primjer details objekta
{
"bike_type": "ebike",
"frame_size": "M / 48cm",
"speeds": 9,
"manufacture_year": 2023
}Polja u details
| Polje | Tip |
|---|---|
| brand_model | string |
| manufacture_year | number |
| registration_plates | string |
| seats | number |
| engine_power | string |
| fuel_type | string |
Amenities IDs
Primjer details objekta
{
"brand_model": "Fiart Mare 28",
"manufacture_year": 2020,
"registration_plates": "RS-4521",
"seats": 6,
"engine_power": "150 KS",
"fuel_type": "petrol"
}Polja u details
| Polje | Tip |
|---|---|
| brand_model | string |
| manufacture_year | number |
| registration_plates | string |
| seats | number |
| transmission | string |
| fuel_type | string |
| engine_power | string |
Amenities IDs
Primjer details objekta
{
"seats": 5,
"brand_model": "VW Golf 8",
"manufacture_year": 2023,
"registration_plates": "BG 789-EF",
"transmission": "automatic",
"fuel_type": "petrol",
"engine_power": "130 KS"
}Oprema
Polja u details
| Polje | Tip |
|---|---|
| capacity | number |
| dimensions | string |
| water_temperature | number |
Amenities IDs
Primjer details objekta
{
"capacity": 20,
"dimensions": "25×10×1.8m",
"water_temperature": 28
}Polja u details
| Polje | Tip |
|---|---|
| capacity | number |
| dimensions | string |
| equipment | string |
Amenities IDs
Primjer details objekta
{
"capacity": 100,
"dimensions": "10×20m",
"equipment": "Stolice, stolovi, LED rasvjeta, pozornica"
}Polja u details
| Polje | Tip |
|---|---|
| capacity | number |
| dimensions | string |
| equipment | string |
Amenities IDs
Primjer details objekta
{
"capacity": 50,
"dimensions": "200m²",
"equipment": "Projektor, platno, PA sistem"
}Polja u details su opciona — vraćaju se samo ako je vlasnik popunio te podatke u dashboardu. Uvijek provjerite da li je vrijednost null prije upotrebe.
Implementacija u Kodu
Preuzmite kompletne i testirane kodne primere za vašu platformu.
// 1. Dobijanje smeštajnih jedinica i zauzetih termina
const fetchUnits = async () => {
const response = await fetch('https://gost365.app/api/v1/units', {
method: 'GET',
headers: {
'x-api-key': 'gost365_live_vaš_api_ključ_ovde',
'Content-Type': 'application/json'
}
});
if (!response.ok) {
throw new Error('Greška pri učitavanju: ' + response.statusText);
}
const result = await response.json();
console.log(result.data); // Niz apartmana
};// 2. Slanje novog upita za rezervaciju sa sajta
const createBooking = async (bookingData) => {
const response = await fetch('https://gost365.app/api/v1/bookings', {
method: 'POST',
headers: {
'x-api-key': 'gost365_live_vaš_api_ključ_ovde',
'Content-Type': 'application/json'
},
body: JSON.stringify({
unit_id: "8f7e6d5c-4b3a-2a19-0e9d-8c7b6a5f4e3d", // UUID apartmana
start_date: "2026-07-01",
end_date: "2026-07-08",
guest_name: "Jovan Jovanović",
guest_email: "jovan.jovanovic@email.com",
guest_phone: "+381641234567", // opciono
adults_count: 2, // opciono, podrazumevano 1
children_count: 1, // opciono, podrazumevano 0
infants_count: 0, // opciono, podrazumevano 0
notes: "Molimo za tihu sobu i krevetac za bebu." // opciono
})
});
if (response.status === 409) {
alert('Izabrani datumi su već zauzeti (Overbooking zaštita).');
return;
}
if (!response.ok) {
const errorData = await response.json();
throw new Error(errorData.error || 'Neuspešno slanje rezervacije');
}
const result = await response.json();
console.log('Uspešno kreirano! ID rezervacije:', result.booking_id);
};