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

Kody błędów

Swawola używa standardowych kodów statusu HTTP, aby wskazać powodzenie lub niepowodzenie żądań API.

Kody statusu HTTP

Kod Status Opis
200 OK Żądanie zakończone sukcesem
201 Created Zasób utworzony pomyślnie
400 Bad Request Nieprawidłowe parametry żądania
401 Unauthorized Brakujące lub nieprawidłowe uwierzytelnienie
403 Forbidden Niewystarczające uprawnienia
404 Not Found Zasób nie istnieje
429 Too Many Requests Przekroczono limit żądań
500 Internal Server Error Wystąpił błąd serwera