Documentatie API


1. Get check in reservations list.

URL: https://api.pynbooking.com/reservation/list/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

GET Request

Response:

[{"id":"917","checkInDate":"2020-05-06","checkOutDate":"2020-05-08","reservationType":"1","roomName":"110","status":"Confirmata","checkIn":true,"guestId":"141","guestName":"Ionescu Ionut","guestPhone":"","guests":[{"guestId":"141","guestName":"Ionescu Ionut","guestPhone":""},{"guestId":"121","guestName":"Oprescu Daniel","guestPhone":""},{"guestId":"133","guestName":"Calin Adrian","guestPhone":""}]},{"id":"961","checkInDate":"2020-05-07","checkOutDate":"2020-05-08","reservationType":1,"roomName":"401","status":"Confirmata","checkIn":true,"guestId":"191","guestName":"Popescu Dorel","guestPhone":"","guests":[{"guestId":"191","guestName":"Popescu Dorel","guestPhone":""}]}]

2. Search room reservations

URL: https://api.pynbooking.com/reservation/roomSearch/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

POST Request parameters
roomNo ( ex. "401")

Response:
[{"id":"961","checkInDate":"2020-05-07","checkOutDate":"2020-05-08","reservationType":1,"roomName":"401","status":"Confirmata","checkIn":true,"guestId":"191","guestName":"Popescu Dorel","guestPhone":"","guests":[{"guestId":"191","guestName":"Popescu Dorel","guestPhone":""}]}]

3. Get search reservations list.

URL: https://api.pynbooking.com/reservation/search/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

POST Request parameters
date (date format ex. "2019-08-30")

Response:

[{"id":"958","checkInDate":"2020-05-08","checkOutDate":"2020-05-09","reservationType":"1","roomName":"104","status":"Confirmata","checkIn":false,"guestId":"141","guestName":"Ionescu Ionut","guestPhone":"","guests":[{"guestId":"141","guestName":"Ionescu Ionut","guestPhone":""}]},{"id":"917","checkInDate":"2020-05-06","checkOutDate":"2020-05-08","reservationType":"1","roomName":"110","status":"Confirmata","checkIn":true,"guestId":"141","guestName":"Ionescu Ionut","guestPhone":"","guests":[{"guestId":"141","guestName":"Ionescu Ionut","guestPhone":""},{"guestId":"121","guestName":"Oprescu Daniel","guestPhone":""},{"guestId":"133","guestName":"Calin Adrian","guestPhone":""}]},{"id":"961","checkInDate":"2020-05-07","checkOutDate":"2020-05-08","reservationType":1,"roomName":"401","status":"Confirmata","checkIn":true,"guestId":"191","guestName":"Popescu Dorel","guestPhone":"","guests":[{"guestId":"191","guestName":"Popescu Dorel","guestPhone":""}]}]


4. Add a product to reservation folio.

URL: https://api.pynbooking.com/reservation/addFolioItem/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

POST Request parameters

id (reservation id)
itemName (char 255)
vat
quantity
price (unit price)
guestId *not required
apiSource *not required
Response:
{
"folioItemId":105586
}

5. Raport plan mese 

URL: https://api.pynbooking.com/reservation/reportMealPlan/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

POST Request parameters
date (date format ex. "2019-08-30")
meal ('breakfast','lunch','dinner')

Response:
{"status":"ok","results":[{"id":"891","roomName":"101","checkInDate":"2020-05-11","checkOutDate":"2020-05-16","nights":"5","mealPlan":"Mic dejun","adultNo":"2","childNo":"0","guestName":"I. Ionescu","barcodes":[{"barcode":"33333","poolAccess":"1"},{"barcode":"42342423422","poolAccess":"0"},{"barcode":"414124","poolAccess":"0"}]},{"id":"890","roomName":"110","checkInDate":"2020-05-12","checkOutDate":"2020-05-16","nights":"4","mealPlan":"Mic dejun","adultNo":"2","childNo":"0","guestName":"I. Ionescu","barcodes":[]}]}

6. Raport plan mese pe o anumita perioada

URL: https://api.pynbooking.com/reservation/reportMealPlanPeriod/
Response format: : JSON
Important Note: For security issues you need a special API-Key. Please insert this Key into the header. If your API-Key is ABCDEFGH Your header should look like: ‘Api-Key: ABCDEFGH’

POST Request parameters
date (date format ex. "2019-08-30")
days (from 1-30)

Response:
{"status":"ok","results":[{"id":"891","roomName":"101","checkInDate":"2020-05-11","checkOutDate":"2020-05-16","nights":"5","mealPlan":"Mic dejun","adultNo":"2","childNo":"0","guestFirstName":"Ionut","guestLastName":"Ionescu","guestPhone":"+400745508386","guestEmail":"ionuti85@gmail.com","barcodes":[{"barcode":"33333","poolAccess":"1"},{"barcode":"42342423422","poolAccess":"0"},{"barcode":"414124","poolAccess":"0"}]},{"id":"890","roomName":"110","checkInDate":"2020-05-12","checkOutDate":"2020-05-16","nights":"4","mealPlan":"Mic dejun","adultNo":"2","childNo":"0","guestFirstName":"Ionut","guestLastName":"Ionescu","guestPhone":"+400745508386","guestEmail":"ionuti85@gmail.com","barcodes":[]},{"id":"960","roomName":"106","checkInDate":"2020-05-15","checkOutDate":"2020-05-16","nights":"1","mealPlan":"Mic dejun","adultNo":"2","childNo":"1","guestFirstName":"Ionut","guestLastName":"Ionescu","guestPhone":"+400745508386","guestEmail":"ionuti85@gmail.com","barcodes":[]},{"id":"885","roomName":"110","checkInDate":"2020-05-18","checkOutDate":"2020-05-25","nights":"7","mealPlan":"Mic dejun","adultNo":"2","childNo":"0","guestFirstName":"Ionut","guestLastName":"Ionescu","guestPhone":"+400745508386","guestEmail":"ionuti85@gmail.com","barcodes":[]}]}


Pentru a putea trimite numele complet si telefonul clientului avem nevoie de numele firmei ce prelucreaza date cu caracter personal precum si ip de la care se vor face requesturile.

1. https://api.pynbooking.com/reservation/list/
-returneaza toate rezervarile check-in din sistem pentru ziua curenta.
-functia se foloseste pentru a vedea rezervarile cazate.

2. https://api.pynbooking.com/reservation/roomSearch/
-returneaza rezervarea check-in din sistem pentru ziua curenta si camera specificata.
-functia se foloseste pentru a vedea rezervarea cazata dintr-o anumita camera.

3. https://api.pynbooking.com/reservation/search/
-returneaza toate rezervarile din ziua dorita($date) fara rezervarile checkout. Data trebuie sa fie mai mare sau egala cu ziua curenta
-se foloseste pentru a vedea totate rezervarile dintr-o zi anume.

Cautarea dupa numarul camerei nu este concludenta pentru rezervarile viitoare. Cautarea pe numarul camerei (nume client , telefon ) o puteti face intern din rezervarile returnate.
Nu exista paginare pentru rezultat.
Daca raspunsul contine campul "status" requestul nu este valid puteti vedea mai multe detalii in campul "detail".

Exemplu php
class PynBooking
{
   private $endpoint = null;
   private $key = null;

   function __construct($apiEndpoint=null, $apiKey=null)
   {
      global $apiUrl,$key;

      if(!isset($apiKey))
         $apiKey = $key;

      if(!isset($apiEndpoint))
         $apiEndpoint = $apiUrl;

      $this->endpoint = $apiEndpoint;
      $this->key = $apiKey;
   }

   public function listReservation()
   {

      $headers[] = "Api-Key: ".$this->key;
      return $this->callHTTP2Json($this->endpoint."/reservation/list/",null,"GET",$headers);
   }
   public function searchReservation($data)
   {

      $headers[] = "Api-Key: ".$this->key;
      return $this->callHTTP2Json($this->endpoint."/reservation/search/",$data,"POST",$headers);
   }
   public function roomSearchReservation($data)
   {

      $headers[] = "Api-Key: ".$this->key;
      return $this->callHTTP2Json($this->endpoint."/reservation/roomSearch/",$data,"POST",$headers);
   }
   public function reportMealPlanReservation($data)
   {

       $headers[] = "Api-Key: ".$this->key;
       return $this->callHTTP2Json($this->endpoint."/reservation/reportMealPlan/",$data,"POST",$headers);
   }

   public function reportMealPlanPeriodReservation($data)
   {

        $headers[] = "Api-Key: ".$this->key;
        return $this->callHTTP2Json($this->endpoint."/reservation/reportMealPlanPeriod/",$data,"POST",$headers);
   }
   public function addFolioItemReservation($data)
   {

      $headers[] = "Api-Key: ".$this->key;
      return $this->callHTTP2Json($this->endpoint."/reservation/addFolioItem/",$data,"POST",$headers);
   }


   private function callHTTP2Json($url,$postparams=null,$method=null,$headers=null,$user=null,$password=null)
   {
      return json_decode($this->callRemote($url,$postparams,$method,$headers,$user,$password),true);
   }


   private function callJson2Json($url,$postparams=null,$method=null,$headers=null,$user=null,$password=null)
   {
      $postparams = json_encode($postparams);

      if($headers==null)
         $headers = array();
      if(is_string($headers))
         $headers = array($headers);

      $headers[] = "Content-type: application/json";

      return json_decode($this->callRemote($url,$postparams,$method,$headers,$user,$password),true);
   }

   private function callRemote($url,$postparams=null,$method=null,$headers=null,$user=null,$password=null)
   {
      if(function_exists('curl_version'))
      {
         return $this->curlRemote($url,$postparams,$method,$headers,$user,$password);
      }
      else
      {
         return $this->httpRemote($url,$postparams,$method,$headers,$user,$password);
      }
   }


   private function httpRemote($url,$postparams=null,$method=null,$headers=null,$user=null,$password=null)
   {

      if($method == null)
      {
         if($postparams==null)
            $method = "GET";
         else
            $method = "POST";
      }

      if($headers == null)
      {
         $headers = array();
      }
      elseif(is_string($headers))
      {
         $headers = array($headers);
      }

      if($method=="POST" && is_array($postparams))
      {
         $headers[] = "Content-type: application/x-www-form-urlencoded";
         $postparams = http_build_query($postparams);
      }

      if($user!=null && $password != null)
      {
         $headers[] = "Authorization: Basic ".base64_encode($user . ":" . $password);
      }

      $context = stream_context_create(array(
         "http"=>array(
            "method" => $method,
            "headers" => $headers,
            "content" => $postparams
         )
      ));

      return file_get_contents($url,false,$context);
   }

   private  function curlRemote($url,$postparams=null,$method=null,$headers=null,$user=null,$password=null)
   {

      // if post params = array and method = null - post
      // if post params = null and method = null - get
      if($method == null)
      {
         if($postparams==null)
            $method = "GET";
         else
            $method = "POST";
      }

      $ch = curl_init();
      curl_setopt($ch, CURLOPT_URL, $url);

      if($method=="POST")
      {
         curl_setopt($ch, CURLOPT_POST, 1);
         curl_setopt($ch, CURLOPT_POSTFIELDS,http_build_query($postparams));// why? because curl is a f r3tard!
      }

      if(is_array($headers) && count($headers) > 0)
      {
         curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
      }

      if($user!=null && $password != null)
      {
         curl_setopt($ch, CURLOPT_USERPWD, $user . ":" . $password);
      }

      curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      $output = curl_exec($ch);
      curl_close($ch);


      
      return $output;
   }
}

$apiEndPoint='https://api.pynbooking.com';
$apiKey=''; cheia pe care o primiti in momentul activari modulului

//1. list reservation
$objPynBooking=new PynBooking($apiEndPoint,$apiKey);
$reservations=$objPynBooking->listReservation();

//2 .room search reservation
$data=array();
$data['roomNo']='401';
$objPynBooking=new PynBooking($apiEndPoint,$apiKey);
$reservations=$objPynBooking->roomSearchReservation($data);
//3. search reservation
$data=array();
$data['date']='2020-07-01';
$objPynBooking=new PynBooking($apiEndPoint,$apiKey);
$reservations=$objPynBooking->searchReservation($data);

//4. add folio item
$data=array();
$data['917']='598';
$data['itemName']='Coca Cola';
$data['price']='5.50';
$data['vat']='5';
$data['quantity']='3';
$data['guestId']='121';
$data['apiSource']='BAR';
$objPynBooking=new PynBooking($apiEndPoint,$apiKey);
$response=$objPynBooking->addFolioItemReservation($data);
 //5. Report Meal plan
$data=array();
$data['date']='2020-05-13';
$data['meal']='breakfast';
$objPynBooking=new PynBooking($apiEndPoint,$apiKey); 
$response=$objPynBooking->reportMealPlanReservation($data);

//6. Report Meal plan on a specific perioad
$data=array();
$data['date']='2020-05-13';
$data['days']='14';
$objPynBooking=new PynBooking($apiEndPoint,$apiKey);
$response=$objPynBooking->reportMealPlanPeriodReservation($data);

Spor!

Pentru mai multe materiale cu informații relevante despre cum îți poți crește afacerea și mări gradul de ocupare, abonează-te la newsletter aici.

* indicates required

Booking Engine – ce e și ce ar trebui să facă

14 caracteristici esențiale ale booking-engine-ului tău pentru ca oaspeții să rezerve ușor, iar tu să vinzi mult. .. citește mai mult

Cu ce te ajută un software hotelier integrat?

Implementând o soluție de la un singur vânzător, hotelierii își simplifică și eficientizează munca. Costurile de IT, ca și cele operaționale scad, iar viitoarele investiții și dezvoltări în IT sunt ușurate în mod semnificativ. .. citește mai mult

PMS-ul tău te ajută sau te sabotează?

Analizează ce știe și ce face înainte de a investi. Alege-ți inteligent instrumentele pe care le folosești. .. citește mai mult

Cât De Ușor Este Să Migrezi Rezervarile în Cloud?

PYNBOOKING oferă un set up simplu, care se rezolvă în câteva ore în așa fel încât rezervările nu vor avea de suferit și, în funcție de datele care trebuie transferate, utilizatorii pot folosi noul sistem într-o oră sau două. .. citește mai mult

Un angajat care folosește un PMS bun e un angajat care-ți va trata clientul cum se cuvine

Odată intrați pe ușa din spate tipică a recepției, ați putea crede că ați călătorit în timp. Unii se duc 40 de ani, alții ”doar” 10. Găsim agende, găsim management ținut într-un tabel în Microsoft office. Promițător, nu? .. citește mai mult

Ce face un PMS bun pentru clientul tău? Mobilitate, rapiditate, confort

Softul de gestiune hotelieră nu deservește doar hotelierului în munca lui din culise, ci și oaspeților. Iar modul în care oaspeții tăi interacționează sau nu cu softul tău este încă o parte a serviciilor care vorbesc despre tine și despre calitate. De aceea, nu credem .. citește mai mult

Există hotelieri captivi într-un blocaj mental.

Industria hotelieră se bazează pe contactul uman. Și mulți hotelieri se tem că un soft prea inteligent ar elimina un astfel de contact, ar depersonaliza relația cu clienții și ar duce-o într-o zona în care n-o mai pot controla. Totuși, nu există ”un soft prea .. citește mai mult

Industria hotelieră și managerii tech savvy

Ne lipsesc managerii tech savvy. Managerii de hotel care să înțeleagă cu adevărat tehnologia și să știe s-o folosească, care să știe ce date să folosească pentru a avea rezultate peste medie. Majoritatea cred că prioritatea lor este și se limitează la menținerea nivelului de .. citește mai mult

Check-in online – un serviciu disponibil oaspeților.

Fișa de hârtie, completată cu pixul, la coadă, este istorie. Așa cum și-au rezervat camera, oaspeții pot face și check-in: online. De acest serviciu, beneficiază toți cei care au rezervat online, indiferent de modalitatea aleasă (OTA sau direct pe site-ul hotelului). .. citește mai mult