Witamy w API Swawola
Witaj w dokumentacji API Swawola. Znajdziesz tutaj wszystkie informacje potrzebne do integracji z naszym systemem.
Postman
Pobierz plik Postman, aby szybko rozpocząć testowanie API. Plik zawiera przykładowe żądania do testowania API.
POBIERZ PLIK
Bazowy URL
https://swawola.pl/api/
Funkcje
-
Architektura RESTful z intuicyjnymi endpointami
-
Bezpieczne uwierzytelnianie za pomocą kluczy API (X-API-KEY i X-API-SECRET)
-
Kompleksowa obsługa błędów i kodów statusu
-
Limity żądań zapewniające sprawiedliwe użytkowanie
Pierwsze żądanie
Oto prosty przykład wykonania żądania GET w celu przetestowania połączenia z API:
curl -X GET "https://swawola.pl/api/hello" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json"
const API_KEY = 'your_api_key_here';
const API_SECRET = 'your_api_secret_here';
fetch('https://swawola.pl/api/hello', {
method: 'GET',
headers: {
'X-API-KEY': API_KEY,
'X-API-SECRET': API_SECRET,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
<?php
$apiKey = 'your_api_key_here';
$apiSecret = 'your_api_secret_here';
$ch = curl_init('https://swawola.pl/api/hello');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: ' . $apiKey,
'X-API-SECRET: ' . $apiSecret,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$data = json_decode($response, true);
print_r($data);
} else {
echo "Error: " . $httpCode;
}
?>
Otrzymasz odpowiedź JSON z wiadomością powitalną:
{
"user": "Jan Kowalski",
"email": "jan.kowalski@example.com",
"message": "Hello from Swawola API"
}
Sprawdź endpoint GET /hello aby uzyskać więcej szczegółów.
Szybki start
Uruchom API Swawola w kilka minut. Wykonaj poniższe kroki, aby wykonać swoje pierwsze pomyślne wywołanie API.
Krok 1: Uzyskaj klucze API
Zarejestruj konto i wygeneruj parę kluczy API (API Key i API Secret) z panelu. Twoje klucze API służą do uwierzytelniania wszystkich żądań.
Krok 2: Wykonaj pierwsze żądanie
Możesz użyć dowolnego klienta HTTP. Oto przykłady dla popularnych języków programowania:
const API_KEY = 'your_api_key_here';
const API_SECRET = 'your_api_secret_here';
const BASE_URL = 'https://swawola.pl/api/';
fetch(`${BASE_URL}hello`, {
method: 'GET',
headers: {
'X-API-KEY': API_KEY,
'X-API-SECRET': API_SECRET,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
<?php
$apiKey = 'your_api_key_here';
$apiSecret = 'your_api_secret_here';
$baseUrl = 'https://swawola.pl/api/';
$ch = curl_init($baseUrl . 'hello');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: ' . $apiKey,
'X-API-SECRET: ' . $apiSecret,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$data = json_decode($response, true);
print_r($data);
} else {
echo "Error: " . $httpCode;
}
?>
Krok 3: Obsługa odpowiedzi
Wszystkie odpowiedzi są zwracane w formacie JSON. Pamiętaj o odpowiedniej obsłudze błędów poprzez sprawdzanie kodów statusu.
Uwierzytelnianie za pomocą kluczy API
Swawola używa pary kluczy API (API Key i API Secret) do uwierzytelniania żądań. Dołącz oba klucze w nagłówkach każdego żądania.
Uzyskanie kluczy API
Możesz wygenerować parę kluczy API (API Key i API Secret) z panelu po zarejestrowaniu się. Każda para kluczy jest unikalna i powinna być przechowywana w bezpiecznym miejscu.
Zabezpiecz swoje klucze API
Nigdy nie ujawniaj kluczy API w kodzie po stronie klienta ani nie umieszczaj ich w systemie kontroli wersji. Zamiast tego używaj zmiennych środowiskowych.
Użycie kluczy API
Dołącz swoje klucze API w nagłówkach X-API-KEY i X-API-SECRET:
X-API-KEY: your_api_key_here
X-API-SECRET: your_api_secret_here
Oto pełny przykład:
curl -X GET "https://swawola.pl/api/rooms" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json"
GET
Test połączenia
Prosty endpoint testowy do sprawdzenia połączenia z API i uwierzytelnienia.
GET /hello
Uwierzytelnianie
Ten endpoint wymaga uwierzytelnienia. Dołącz swoje klucze API w nagłówkach X-API-KEY i X-API-SECRET.
Przykładowe żądanie
curl -X GET "https://swawola.pl/api/hello" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json"
const API_KEY = 'your_api_key_here';
const API_SECRET = 'your_api_secret_here';
fetch('https://swawola.pl/api/hello', {
method: 'GET',
headers: {
'X-API-KEY': API_KEY,
'X-API-SECRET': API_SECRET,
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
<?php
$apiKey = 'your_api_key_here';
$apiSecret = 'your_api_secret_here';
$ch = curl_init('https://swawola.pl/api/hello');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'X-API-KEY: ' . $apiKey,
'X-API-SECRET: ' . $apiSecret,
'Content-Type: application/json'
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($httpCode === 200) {
$data = json_decode($response, true);
print_r($data);
} else {
echo "Error: " . $httpCode;
}
?>
Przykładowa odpowiedź
{
"user": "Jan Kowalski",
"email": "jan.kowalski@example.com",
"message": "Hello from Swawola API"
}
Struktura odpowiedzi
| Pole |
Typ |
Opis |
| user |
string |
Nazwa uwierzytelnionego użytkownika |
| email |
string |
Adres email użytkownika |
| message |
string |
Wiadomość powitalna z API |
GET
Pobierz hotele i pokoje
Pobierz listę wszystkich pokoi z powiązanymi obiektami użytkownika.
GET /rooms
Uwierzytelnianie
Ten endpoint wymaga uwierzytelnienia. Dołącz swoje klucze API w nagłówkach X-API-KEY i X-API-SECRET.
Przykładowe żądanie
curl -X GET "https://swawola.pl/api/rooms" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json"
Przykładowa odpowiedź
[
{
"title": "Dom z bajki",
"user_rooms": [
{
"title": "pokój w domku z bajki",
"uuid": "945a5b47-1729-4fd7-96de-XXXXXXXXXXXX",
"status": "draft"
}
]
},
{
"title": "Domek letniskowy na kempingu",
"user_rooms": [
{
"title": "Domek letniskowy",
"uuid": "d9b3a6d5-6ff5-4d42-8957-XXXXXXXXXXXX",
"status": "publish"
},
{
"title": "Domek letniskowy 2",
"uuid": "d9b3a6d5-6ff5-4d42-8957-XXXXXXXXXXXX",
"status": "publish"
}
]
}
]
Struktura odpowiedzi
| Pole |
Typ |
Opis |
| title |
string |
Tytuł pokoju |
| user_rooms |
array |
Tablica pokoi użytkownika |
| user_rooms.title |
string |
Tytuł pokoju użytkownika |
| user_rooms.uuid |
string |
Unikalny identyfikator UUID pokoju użytkownika |
| user_rooms.status |
string |
Status pokoju (draft, publish) |
GET
Sprawdź dostępność pokoju
Pobierz informacje o dostępności pokoju hotelowego w określonym zakresie dat.
GET /availability
Parametry zapytania (query)
| Parametr |
Typ |
Opis |
| uuid |
string |
Unikalny identyfikator pokoju (format UUID) |
| start_date |
string |
Data początkowa (format: YYYY-MM-DD). Nie może być w przeszłości. |
| end_date |
string |
Data końcowa (format: YYYY-MM-DD). Maksymalny zakres: 180 dni. |
Uwierzytelnianie
Ten endpoint wymaga uwierzytelnienia. Dołącz swoje klucze API w nagłówkach X-API-KEY i X-API-SECRET.
Przykładowe żądanie
curl -X GET "https://swawola.pl/api/availability?uuid=945a5b47-1729-4fd7-96de-fce8272ba8bf&start_date=2025-10-16&end_date=2025-10-29" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json"
Przykładowa odpowiedź
[
{
"date": "2025-10-16",
"available": true
},
{
"date": "2025-10-17",
"available": false
},
{
"date": "2025-10-18",
"available": true
},
{
"date": "2025-10-19",
"available": true
},
{
"date": "2025-10-20",
"available": true
},
{
"date": "2025-10-21",
"available": true
},
{
"date": "2025-10-22",
"available": true
},
{
"date": "2025-10-23",
"available": true
},
{
"date": "2025-10-24",
"available": true
}
]
Struktura odpowiedzi
| Pole |
Typ |
Opis |
| date |
string |
Data w formacie YYYY-MM-DD |
| available |
boolean |
Czy pokój jest dostępny w tym dniu (true = dostępny, false = zajęty) |
Możliwe błędy
| Kod |
Komunikat błędu |
Opis |
| 400 |
Missing parameter: uuid |
Brak parametru uuid |
| 400 |
Missing parameter: start_date |
Brak parametru start_date |
| 400 |
Invalid date format for start_date |
Nieprawidłowy format daty dla start_date (oczekiwany: YYYY-MM-DD) |
| 400 |
Invalid start_date: this date does not exist |
Nieprawidłowa data początkowa - podana data nie istnieje |
| 400 |
start_date cannot be in the past |
Data początkowa nie może być w przeszłości |
| 400 |
Missing parameter: end_date |
Brak parametru end_date |
| 400 |
Invalid date format for end_date |
Nieprawidłowy format daty dla end_date (oczekiwany: YYYY-MM-DD) |
| 400 |
Invalid end_date: this date does not exist |
Nieprawidłowa data końcowa - podana data nie istnieje |
| 400 |
The maximum search range is 180 days |
Maksymalny zakres wyszukiwania to 180 dni |
| 400 |
Invalid uuid: room not found |
Nieprawidłowy uuid - pokój nie został znaleziony |
| 403 |
Unauthorized: you do not own this room |
Brak uprawnień - nie jesteś właścicielem tego pokoju |
Ważne informacje
- • Data początkowa nie może być w przeszłości
- • Maksymalny zakres wyszukiwania to 180 dni
- • Format daty musi być YYYY-MM-DD
- • Musisz być właścicielem pokoju, aby sprawdzić jego dostępność
POST
Ustaw dostępność pokoju
Ustaw dostępność pokoju hotelowego oraz jego ceny w określonym zakresie dat.
POST /set-availability
Parametry JSON (Body)
| Parametr |
Typ |
Wymagane |
Opis |
| uuid |
string |
TAK |
Unikalny identyfikator pokoju (ical_uuid) |
| checkout_type |
integer |
NIE |
Typ rozliczenia: 1 = cena za pokój, 2 = cena według wieku gościa |
| price |
number |
WARUNKOWE |
Cena bazowa pokoju (wymagane dla checkout_type = 1) |
| price_adults |
number |
WARUNKOWE |
Cena dla dorosłych i dzieci >12 lat (wymagane dla checkout_type = 2) |
| price_children |
number |
WARUNKOWE |
Cena dla dzieci 4-12 lat (wymagane dla checkout_type = 2) |
| price_newborns |
number |
WARUNKOWE |
Cena dla młodszych dzieci 0-3 lat (wymagane dla checkout_type = 2) |
| min_price |
number |
WARUNKOWE |
Minimalna cena za rezerwację (wymagane dla checkout_type = 2) |
| available |
boolean |
NIE |
Dostępność pokoju (true = dostępny, false = niedostępny) |
| start_date |
string |
WARUNKOWE |
Data początkowa (YYYY-MM-DD) - wymagane jeśli ustawiane jest "available" |
| end_date |
string |
WARUNKOWE |
Data końcowa (YYYY-MM-DD) - wymagane jeśli ustawiane jest "available" |
Uwierzytelnianie
Ten endpoint wymaga uwierzytelnienia. Dołącz swoje klucze API w nagłówkach X-API-KEY i X-API-SECRET.
Przykładowe żądanie - Typ 1 (cena za pokój)
curl -X POST "https://swawola.pl/api/set-availability" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json" \
-d '{
"uuid": "945a5b47-1729-4fd7-96de-fce8272ba8bf",
"checkout_type": 1,
"price": 250,
"available": true,
"start_date": "2025-12-01",
"end_date": "2025-12-10"
}'
Przykładowe żądanie - Typ 2 (cena według wieku)
curl -X POST "https://swawola.pl/api/set-availability" \
-H "X-API-KEY: your_api_key_here" \
-H "X-API-SECRET: your_api_secret_here" \
-H "Content-Type: application/json" \
-d '{
"uuid": "945a5b47-1729-4fd7-96de-fce8272ba8bf",
"checkout_type": 2,
"price_adults": 300,
"price_children": 150,
"price_newborns": 50,
"min_price": 200,
"available": true,
"start_date": "2025-12-01",
"end_date": "2025-12-10"
}'
Przykładowa odpowiedź
{"success": "Availability updated successfully"}
Możliwe błędy
| Kod |
Komunikat błędu |
Opis |
| 400 |
Missing parameter: uuid |
Brak parametru uuid |
| 400 |
Invalid uuid: room not found |
Nieprawidłowy uuid - pokój nie został znaleziony |
| 403 |
Unauthorized: you do not own this room |
Brak uprawnień - nie jesteś właścicielem tego pokoju |
| 400 |
Invalid parameter: checkout_type must be 1 or 2 |
Nieprawidłowy parametr checkout_type, musi być 1 lub 2 |
| 400 |
Missing parameter: price for checkout_type 1 |
Brak parametru price dla checkout_type 1 |
| 400 |
Missing parameter: price_adults, price_children, price_newborns, min_price for checkout_type 2 |
Brakujące parametry cenowe dla checkout_type 2 |
| 400 |
Invalid parameter: available must be boolean |
Nieprawidłowy parametr available, musi być typu boolean |
| 400 |
Missing parameter: start_date |
Brak wymaganego parametru start_date (wymagany przy ustawianiu dostępności) |
| 400 |
Invalid date format for start_date. Expected format: YYYY-MM-DD |
Nieprawidłowy format daty dla start_date |
| 400 |
Missing parameter: end_date |
Brak wymaganego parametru end_date (wymagany przy ustawianiu dostępności) |
| 400 |
Invalid date format for end_date. Expected format: YYYY-MM-DD |
Nieprawidłowy format daty dla end_date |
| 400 |
Invalid end_date: this date does not exist |
Nieprawidłowa data końcowa - podana data nie istnieje |
Ważne informacje
- • Musisz być właścicielem pokoju, aby ustawić jego dostępność
- • checkout_type = 1: cena jednolita za cały pokój
- • checkout_type = 2: ceny według wieku gościa (0-3, 4-12, 13+)
- • Parametr "available" jest opcjonalny - jeśli nie zostanie ustawiony, zmienią się tylko ceny
- • Format daty musi być YYYY-MM-DD
- • Wszystkie daty w zakresie start_date do end_date zostaną zaktualizowane