diff --git a/base-php-client/.gitignore b/base-php-client/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..35ce444443af38e7cef6092467ef08cf94e330e2
--- /dev/null
+++ b/base-php-client/.gitignore
@@ -0,0 +1,2 @@
+settings.php
+
diff --git a/base-php-client/README.md b/base-php-client/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3196bf69588056dca235e6f3c6a52d23f57ab2b6
--- /dev/null
+++ b/base-php-client/README.md
@@ -0,0 +1,26 @@
+ΒιβλιοθΞ�ΞΊΞ· ΞΊΞ±ΞΉ Ο€ΟΟŒΞ³ΟΞ±ΞΌΞΌΞ± κατανάλωσης 
+====================================
+
+# ΞŸΞ΄Ξ·Ξ³Ξ―Ξ΅Ο‚ 
+
+Ξ‘Ξ½Ο„ΞΉΞ³ΟΞ¬ΟˆΟ„Ξ΅ το αρχΡίο `settings.php.dist` σΡ Ξ­Ξ½Ξ± Ξ½Ξ­ΞΏ αρχΡίο `settings.php` ΞΊΞ±ΞΉ
+τροποποιΞ�στΡ Ξ±Ξ½Ξ±Ξ»ΟŒΞ³Ο‰Ο‚, Ξ³ΞΉΞ± παράδΡιγμα Ρισάγοντας το όνομα χρΞ�στη που σας έχΡι 
+αποδοθΡί. 
+
+# Πρόγραμμα ΡπίδΡιξης 
+
+Για την ΡπίδΡιξη των διαθέσιμων Ξ»Ξ΅ΞΉΟ„ΞΏΟ…ΟΞ³ΞΉΟŽΞ½ έχΡι αναπτυχθΡί Ο€ΟΟŒΞ³ΟΞ±ΞΌΞΌΞ± 
+[index.php](index.php) που μπορΡίτΡ Ξ½Ξ± ΡκτΡλέσΡτΡ Ξ±Ο€ΟŒ τη γραμμΞ� Ξ΅Ξ½Ο„ΞΏΞ»ΟŽΞ½.
+΀ο Ο€ΟΟŒΞ³ΟΞ±ΞΌΞΌΞ± δέχΡται τις παρακάτω παραμέτρους: 
+
+```
+ΧρΞ�ση: index.php [--list] [--listshow] [--send <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]
+         list: λίστα hashids των Ργγράφων
+     listshow: λίστα αρχΡίων
+  send <file>: ΞΊΞ±Ο„Ξ±Ο‡ΟŽΟΞ·ΟƒΞ· Ο€ΟΟ‰Ο„ΞΏΞΊΟŒΞ»Ξ»ΞΏΟ… ΞΌΞ΅ αποστολΞ� του αρχΡίου file
+  show <hash>: αναλυτικές πληροφορίΡς αρχΡίου ΞΌΞ΅ δΡδομένο hashid
+   get <hash>: Ξ»Ξ�ψη  αρχΡίου ΞΌΞ΅ δΡδομένο hashid
+  save <hash>: Ξ»Ξ�ψη ΞΊΞ±ΞΉ αποθΞ�κΡυση αρχΡίου ΞΌΞ΅ δΡδομένο hashid
+               στον τρέχοντα φάκΡλο ΞΊΞ±ΞΉ ΞΌΞ΅ το όνομα αρχΡίου που ΡπιστρέφΡται
+```
+
diff --git a/base-php-client/index.php b/base-php-client/index.php
new file mode 100644
index 0000000000000000000000000000000000000000..6757110b6b0689b58cae7cd45b02d79ee0833b01
--- /dev/null
+++ b/base-php-client/index.php
@@ -0,0 +1,75 @@
+<?php
+// barebone app - autoload classes from src/ dir
+spl_autoload_register(function ($class_name) {
+    $class_name_parts = explode('\\', $class_name);
+    $class_filename = __DIR__ . '/src/' . end($class_name_parts) . '.php';
+    if (file_exists($class_filename)) {
+        include $class_filename;
+        if (class_exists($class_name)) {
+            return true;
+        }
+    }
+    return false;
+});
+
+use Gr\Gov\Minedu\Osteam\App;
+
+$settings = require(__DIR__ . '/settings.php');
+
+$app = new App($settings);
+$app->setDebug(true);
+
+/**
+ * Ξ›Ξ�ψη παραμέτρων καθορισμού λΡιτουργίας Ξ±Ο€ΟŒ τη γραμμΞ� Ξ΅Ξ½Ο„ΞΏΞ»ΟŽΞ½ 
+ */
+$options = getopt('', ['send:', 'list', 'listshow', 'show:', 'get:', 'save:']);
+
+$send = isset($options['send']);
+$list = isset($options['list']) || isset($options['listshow']);
+$listdetails = isset($options['listshow']);
+$show = isset($options['show']);
+$get = isset($options['get']) || isset($options['save']);
+$save = isset($options['save']);
+
+/**
+ * ΞˆΞ»Ξ΅Ξ³Ο‡ΞΏΟ‚ παραμέτρων
+ */
+if (!$send && !$list && !$show && !$get) {
+    echo "ΧρΞ�ση: {$argv[0]} [--list] [--listshow] [--send <file>] [--show <hashid>] [--get <hashid>] [--save <hashid>]", PHP_EOL,
+    "         list: λίστα hashids των Ργγράφων", PHP_EOL,
+    "     listshow: λίστα αρχΡίων", PHP_EOL,
+    "  send <file>: ΞΊΞ±Ο„Ξ±Ο‡ΟŽΟΞ·ΟƒΞ· Ο€ΟΟ‰Ο„ΞΏΞΊΟŒΞ»Ξ»ΞΏΟ… ΞΌΞ΅ αποστολΞ� του αρχΡίου file", PHP_EOL,
+    "  show <hash>: αναλυτικές πληροφορίΡς αρχΡίου ΞΌΞ΅ δΡδομένο hashid", PHP_EOL,
+    "   get <hash>: Ξ»Ξ�ψη  αρχΡίου ΞΌΞ΅ δΡδομένο hashid", PHP_EOL,
+    "  save <hash>: Ξ»Ξ�ψη ΞΊΞ±ΞΉ αποθΞ�κΡυση αρχΡίου ΞΌΞ΅ δΡδομένο hashid", PHP_EOL,
+    "               στον τρέχοντα φάκΡλο ΞΊΞ±ΞΉ ΞΌΞ΅ το όνομα αρχΡίου που ΡπιστρέφΡται", PHP_EOL,
+    exit(0);
+}
+if ($send) {
+    echo "ΞˆΞ»Ξ΅Ξ³Ο‡ΞΏΟ‚ Ξ³ΞΉΞ± το αρχΡίο {$options['send']}... ";
+    if (is_readable($options['send'])) {
+        $file = base64_encode(file_get_contents($options['send']));
+        if ($file === false) {
+            echo PHP_EOL, "Ξ›Ξ‘Ξ˜ΞŸΞ£: Αδυναμία κωδικοποίησης του αρχΡίου.", PHP_EOL;
+        }
+        echo "OK", PHP_EOL;
+    } else {
+        echo PHP_EOL, "Ξ›Ξ‘Ξ˜ΞŸΞ£: ΀ο αρχΡίο δΡν Ρίναι Ξ±Ξ½Ξ±Ξ³Ξ½ΟŽΟƒΞΉΞΌΞΏ.", PHP_EOL;
+        exit(-1);
+    }
+}
+
+/**
+ * If any work is to be done, an api key is required 
+ */
+echo "Ανάκτηση API key...", PHP_EOL;
+try {
+    $apikey = $app->getApiKey();
+    echo "΀ο API key Ρίναι: ", $apikey, PHP_EOL;
+} catch (\Exception $e) {
+    echo 'Ξ›Ξ‘Ξ˜ΞŸΞ£: Αδυναμία ανάκτησης API key. ', PHP_EOL, $e->getMessage(), PHP_EOL;
+    exit(-1);
+}
+
+echo "Done.", PHP_EOL;
+exit(0);
diff --git a/base-php-client/settings.php.dist b/base-php-client/settings.php.dist
new file mode 100644
index 0000000000000000000000000000000000000000..facaf06cd3acc9c9f9c08aca51aee68f086bbfe2
--- /dev/null
+++ b/base-php-client/settings.php.dist
@@ -0,0 +1,8 @@
+<?php
+return [
+    // username and password to authenticate 
+    'username' => 'test',
+    'password' => '123456',
+    // sender id for test lookups 
+    'sender_id' => 100000001
+];
diff --git a/base-php-client/src/App.php b/base-php-client/src/App.php
new file mode 100644
index 0000000000000000000000000000000000000000..ba1824318892cde361a700425bfbc8d13e013287
--- /dev/null
+++ b/base-php-client/src/App.php
@@ -0,0 +1,102 @@
+<?php
+//
+namespace Gr\Gov\Minedu\Osteam;
+
+use Gr\Gov\Minedu\Osteam\Client;
+
+/**
+ * Description of app
+ *
+ * @author spapad
+ */
+class App
+{
+
+    private $client = null;
+    private $_settings = [];
+    private $_debug = false;
+
+    /**
+     * 
+     * @param array $settings is an array of configuration parameters 
+     */
+    function __construct($settings = [])
+    {
+        $this->_settings = array_merge($this->_settings, $settings);
+        $this->client = new Client();
+    }
+
+    protected function setting($name)
+    {
+        return (isset($this->_settings["$name"]) ?
+                $this->_settings["$name"] :
+                null);
+    }
+
+    /**
+     * 
+     * @return string The api key 
+     * @throws \Swagger\Client\ApiException 
+     */
+    public function getApiKey()
+    {
+        // debug?
+
+        $payload = json_encode([
+            'username' => $this->setting('username'),
+            'password' => $this->setting('password')
+        ]);
+
+        $response = json_decode($this->client->pauth($payload));
+        return $response->apiKey;
+    }
+
+    public function searchDocuments($apikey = null)
+    {
+        
+    }
+
+    public function getDocData($hashid, $apikey = null)
+    {
+        
+    }
+
+    public function submit($submission_data, $apikey = null)
+    {
+        
+    }
+
+    public function getPdf($hashid, $apikey = null)
+    {
+        
+    }
+
+    public function savePdf($hashid, $apikey = null)
+    {
+        
+    }
+
+    /**
+     * Try to return the object fields in a hash array
+     * 
+     * @param object $resultobj The object 
+     * @return type
+     */
+    public function apiResultObjAsArray($resultobj)
+    {
+        $result = [];
+        if (method_exists($resultobj, 'getters')) {
+            $getters = $resultobj->getters();
+            foreach ($getters as $property => $callfunc) {
+                $result[$property] = $resultobj->$callfunc();
+            }
+        }
+        return $result;
+    }
+
+    public function setDebug($debug = true)
+    {
+        $this->_debug = ($debug === true);
+        return;
+    }
+}
diff --git a/base-php-client/src/Client.php b/base-php-client/src/Client.php
new file mode 100644
index 0000000000000000000000000000000000000000..ff5cb7ec5e75f6d9051bb77237bccb52c9b6a465
--- /dev/null
+++ b/base-php-client/src/Client.php
@@ -0,0 +1,100 @@
+<?php
+/*
+ * 
+ */
+namespace Gr\Gov\Minedu\Osteam;
+
+use Exception;
+
+/**
+ * Description of Client
+ *
+ * @author spapad
+ */
+class Client
+{
+
+    private $_debug = false;
+    private $_settings = [
+        'base_uri' => 'https://protocoltest.minedu.gov.gr:443/openpapyros/api'
+    ];
+
+    public function __construct($settings = [])
+    {
+        $this->_settings = array_merge($this->_settings, $settings);
+    }
+
+    public function pauth($payload)
+    {
+        $result = $this->put("{$this->_settings['base_uri']}/pauthenticate/pauth", $payload, [
+            "Content-Type: application/json",
+            "Accept: application/json",
+            ]
+        );
+        return $result;
+    }
+
+    protected function setCommonCurlOptions($ch, $uri, $headers)
+    {
+        curl_setopt($ch, CURLOPT_URL, $uri);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($ch, CURLOPT_USERAGENT, "OSTEAM barebone php client");
+
+        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
+        curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
+        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
+        if ($this->_debug === true) {
+            curl_setopt($ch, CURLOPT_VERBOSE, true);
+        }
+    }
+
+    public function put($uri, $payload, $headers = [])
+    {
+        $ch = curl_init();
+
+        $this->setCommonCurlOptions($ch, $uri, $headers);
+
+        // curl_setopt($ch, CURLOPT_PUT, true);
+        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+        $result = curl_exec($ch);
+
+        if (curl_errno($ch)) {
+            throw new Exception("Λάθος κατά την ΞΊΞ»Ξ�ση του {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true));
+        }
+        if (intval(($http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE)) / 100) != 2) {
+            // πραγματοποιΞ�ΞΈΞ·ΞΊΞ΅ ΞΊΞ»Ξ�ση αλλά δΡν Ξ�ταν "ΡπιτυχΞ�Ο‚"
+            throw new Exception("Αποτυχημένη ΞΊΞ»Ξ�ση. HTTP STATUS {$http_code}. Ξ— απάντηση Ξ�ταν: {$result}", $http_code);
+        }
+        curl_close($ch);
+        return $result;
+    }
+
+    public function post($uri, $payload, $headers = [])
+    {
+        $ch = curl_init();
+
+        curl_setopt($ch, CURLOPT_URL, $uri);
+        curl_setopt($ch, CURLOPT_POST, true);
+        curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
+        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
+
+        $result = curl_exec($ch);
+
+        echo "Error posting to {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true);
+        if (curl_errno($ch)) {
+            throw new Exception("Error posting to {$uri}. Curl error: " . curl_error($ch) . " Curl info: ", var_export(curl_getinfo($ch), true));
+        }
+        curl_close($ch);
+        return $result;
+    }
+
+    public function setDebug($debug = true)
+    {
+        $this->_debug = ($debug === true);
+        return;
+    }
+}