diff --git a/include/libdap_client_python.h b/include/libdap_client_python.h
new file mode 100644
index 0000000000000000000000000000000000000000..9a95fbf75234b16249550749214b3156fddb9325
--- /dev/null
+++ b/include/libdap_client_python.h
@@ -0,0 +1,98 @@
+#define PY_SSIZE_T_CLEAN
+#include <Python.h>
+#include "dap_client.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct PyDapClient{
+    PyObject_HEAD
+    dap_client_t *client;
+}PyDapClientObject;
+
+int dap_client_init_py();
+void dap_client_deinit_py();
+
+//PyObject *dap_client_new_py(PyObject *)
+PyObject *dap_client_delete_py(PyObject *self, PyObject *args);
+
+PyObject *dao_client_set_uplink_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_uplink_addr_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_uplink_port_py(PyObject *self, PyObject *args);
+
+PyObject *dap_client_get_key_stream_py(PyObject *self, PyObject *args);
+PyObject *dap_client_go_stage_py(PyObject *self, PyObject *args);
+PyObject *dap_client_reset_py(PyObject *self, PyObject *args);
+PyObject *dap_client_request_enc_py(PyObject *self, PyObject *args);
+PyObject *dap_client_request_py(PyObject *self, PyObject *args);
+PyObject *dap_client_disconnect_py(PyObject *self, PyObject *args);
+
+PyObject *dap_client_get_stage_str_py(PyObject *self, PyObject *args);
+PyObject *dap_client_stage_str_py(PyObject *self, PyObject *args);
+
+PyObject *dap_client_get_stage_status_str_py(PyObject *self, PyObject *args);
+PyObject *dap_client_stage_status_str_py(PyObject *self, PyObject *args);
+PyObject *dap_client_error_str_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_error_str_py(PyObject *self, PyObject *args);
+
+PyObject *dap_client_get_auth_cookie_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_stream_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_stream_ch_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_stream_id_py(PyObject *self, PyObject *args);
+PyObject *dap_client_set_active_channels_py(PyObject *self, PyObject *args);
+
+PyObject *dap_client_get_stage_py(PyObject *self, PyObject *args);
+PyObject *dap_client_get_stage_status_py(PyObject *self, PyObject *args);
+
+static PyMethodDef DapClientMethods[] = {
+        {NULL, NULL, 0, NULL}
+};
+
+static PyTypeObject dapClientObject_dapClientType = {
+        PyVarObject_HEAD_INIT(NULL, 0)
+        "CellFrame.Client",                                      /* tp_name */
+        sizeof(PyDapClientObject),                               /* tp_basicsize */
+        0,                                                            /* tp_itemsize */
+        0,                                                            /* tp_dealloc */
+        0,                                                            /* tp_print */
+        0,                                                            /* tp_getattr */
+        0,                                                            /* tp_setattr */
+        0,                                                            /* tp_reserved */
+        0,                                                            /* tp_repr */
+        0,                                                            /* tp_as_number */
+        0,                                                            /* tp_as_sequence */
+        0,                                                            /* tp_as_mapping */
+        0,                                                            /* tp_hash  */
+        0,                                                            /* tp_call */
+        0,                                                            /* tp_str */
+        0,                                                            /* tp_getattro */
+        0,                                                            /* tp_setattro */
+        0,                                                            /* tp_as_buffer */
+        Py_TPFLAGS_DEFAULT |
+        Py_TPFLAGS_BASETYPE,                                      /* tp_flags */
+        "Client objects",                                              /* tp_doc */
+        0,		                                                      /* tp_traverse */
+        0,		                                                      /* tp_clear */
+        0,		                                                      /* tp_richcompare */
+        0,		                                                      /* tp_weaklistoffset */
+        0,		                                                      /* tp_iter */
+        0,		                                                      /* tp_iternext */
+        DapClientMethods,                                              /* tp_methods */
+        0,                                                            /* tp_members */
+        0,                                                            /* tp_getset */
+        0,                                                            /* tp_base */
+        0,                                                            /* tp_dict */
+        0,                                                            /* tp_descr_get */
+        0,                                                            /* tp_descr_set */
+        0,                                                            /* tp_dictoffset */
+        0,                                                            /* tp_init */
+        0,                                                            /* tp_alloc */
+        PyType_GenericNew,                                            /* tp_new */
+
+};
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/src/libdap_client_python.c b/src/libdap_client_python.c
new file mode 100644
index 0000000000000000000000000000000000000000..101eee85b90ef8a52779871afac1123d6d24a685
--- /dev/null
+++ b/src/libdap_client_python.c
@@ -0,0 +1,80 @@
+#include "libdap_client_python.h"
+
+int dap_client_init_py(){
+    return dap_client_init();
+}
+void dap_client_deinit_py(){
+    dap_client_deinit();
+}
+
+PyObject *dao_client_set_uplink_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_uplink_addr_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_uplink_port_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+
+PyObject *dap_client_get_key_stream_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_go_stage_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_reset_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_request_enc_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_request_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_disconnect_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+
+PyObject *dap_client_get_stage_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_stage_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+
+PyObject *dap_client_get_stage_status_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_stage_status_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_error_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_error_str_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+
+PyObject *dap_client_get_auth_cookie_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_stream_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_stream_ch_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_stream_id_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_set_active_channels_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+
+PyObject *dap_client_get_stage_py(PyObject *self, PyObject *args){
+    return NULL;
+}
+PyObject *dap_client_get_stage_status_py(PyObject *self, PyObject *args){
+    return NULL;
+}
\ No newline at end of file