diff --git a/assets/.gitkept b/assets/.gitkept
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/includes/class-integration.php b/includes/class-integration.php
index f85830defcb58de4f72360b54a6d70b02a051363..a31ce80725c5aa7e93866a1386bb9e85df3be486 100644
--- a/includes/class-integration.php
+++ b/includes/class-integration.php
@@ -10,42 +10,66 @@ abstract class Integration extends Singleton
 {
     abstract public function serialize_submission($submission, $form);
     abstract public function serialize_form($form);
-	abstract public function get_uploads($submission, $form_data);
-	abstract public function init();
+    abstract public function get_uploads($submission, $form_data);
+    abstract public function init();
 
     protected function __construct()
     {
         add_action('init', [$this, 'init']);
+
+        add_filter('option_wpct-erp-forms_rest-api', function ($setting) {
+            return $this->populate_refs($setting);
+        }, 10, 1);
+        add_filter('option_wpct-erp-forms_rpc-api', function ($setting) {
+            return $this->populate_refs($setting);
+        }, 10, 1);
+        add_action('update_option', function ($option, $from, $to) {
+            if ($option === 'wpct-erp-forms_rest-api' || $option === 'wpct-erp-forms_rpc-api') {
+                foreach ($to['forms'] as $form) {
+                    $this->set_form_ref($form['form_id'], $form['ref']);
+                }
+            }
+        }, 10, 3);
     }
 
     public function submit($payload, $endpoints, $uploads, $form_data)
     {
         $success = true;
-        foreach ($endpoints as $endpoint) {
+        foreach ($endpoints as $proto => $urls) {
+            foreach ($urls as $url) {
+                if (!$success) {
+                    continue;
+                }
 
-            if (empty($uploads)) {
-                $response = Wpct_Http_Client::post($endpoint, $payload);
-            } else {
-                $response = Wpct_Http_Client::post_multipart($endpoint, $payload, $uploads);
-            }
+                if ($proto === 'rpc') {
+                    $data = $this->rpc_payload($payload);
+				} else {
+					$data = $payload;
+				}
+                if (empty($uploads)) {
+                    $response = Wpct_Http_Client::post($url, $data);
+                } else {
+                    $response = Wpct_Http_Client::post_multipart($url, $data, $uploads);
+                }
 
-            if (!$response) {
-                $success = false;
+                $success = $success && (bool) $response;
+            }
+        }
 
-                $settings = get_option('wpct-erp-forms_general');
-                if (!isset($settings['notification_receiver'])) {
-                    return;
-                }
+        if (!$success) {
+            $email = Settings::get_setting('wpct-erp-forms', 'general', 'notification_receiver');
+            if (empty($email)) {
+                return;
+            }
 
-                $to = $settings['notification_receiver'];
-                $subject = 'Wpct ERP Forms Error';
-                $body = "Form ID: {$form_data['id']}\n";
-                $body .= "Form title: {$form_data['title']}";
-                $body .= 'Submission: ' . print_r($payload, true);
-                $success = wp_mail($to, $subject, $body);
-                if (!$success) {
-                    throw new Exception('Error while submitting form ' . $form_data['id']);
-                }
+            $to = $email;
+            $subject = 'Wpct ERP Forms Error';
+            $body = "Form ID: {$form_data['id']}\n";
+            $body .= "Form title: {$form_data['title']}";
+            $body .= 'Submission: ' . print_r($payload, true);
+            $success = wp_mail($to, $subject, $body);
+            if (!$success) {
+                throw new Exception('Error while submitting form ' . $form_data['id']);
             }
         }
 
@@ -55,7 +79,7 @@ abstract class Integration extends Singleton
     public function do_submission($submission, $form)
     {
         $form_data = $this->serialize_form($form);
-        if (!$this->has_endpoints($form_data['id'])) {
+        if ($form_data['ref'] === null) {
             return;
         }
 
@@ -76,7 +100,7 @@ abstract class Integration extends Singleton
         $this->cleanup_empties($data);
         $payload = apply_filters('wpct_erp_forms_payload', $data, $uploads, $form_data);
 
-        $endpoints = apply_filters('wpct_erp_forms_endpoints', $this->get_endpoints($form_data['id']), $payload, $uploads, $form_data);
+        $endpoints = apply_filters('wpct_erp_forms_endpoints', $this->get_form_endpoints($form_data['id']), $payload, $uploads, $form_data);
 
         do_action('wpct_erp_forms_before_submission', $payload, $uploads, $form_data);
         $success = $this->submit($payload, $endpoints, $uploads, $form_data);
@@ -99,31 +123,37 @@ abstract class Integration extends Singleton
         return $submission;
     }
 
-    public function has_endpoints($form_id)
-    {
-        return sizeof($this->get_endpoints($form_id)) > 0;
-    }
-
-    private function get_endpoints($form_id)
+    private function get_form_endpoints($form_id)
     {
-        $maps = array_filter(
-            get_option('wpct-erp-forms_api', ['endpoints' => []])['endpoints'],
-            function ($map) use ($form_id) {
-                return (string) $map['form_id'] === (string) $form_id;
-            }
-        );
+        $rest_forms = Settings::get_setting('wpct-erp-forms', 'rest-api', 'forms');
+        $rpc_forms = Settings::get_setting('wpct-erp-forms', 'rpc-api', 'forms');
+        $rpc_endpoint = Settings::get_setting('wpct-erp-forms', 'rpc-api', 'endpoint');
+
+        $endpoints = [
+            'rpc' => $rpc_forms,
+            'rest' => $rest_forms,
+        ];
+
+        foreach ($endpoints as $proto => $forms) {
+            $endpoints[$proto] = array_map(function ($form) use ($rpc_endpoint) {
+                return isset($form['endpoint']) ? $form['endpoint'] : $rpc_endpoint;
+            }, array_filter(
+                $forms,
+                function ($form) use ($form_id) {
+                    return (string) $form['form_id'] === (string) $form_id;
+                }
+            ));
+        }
 
-        return array_map(function ($map) {
-            return $map['endpoint'];
-        }, $maps);
+        return $endpoints;
     }
 
     public function get_form_ref($form_id)
     {
-        $setting = get_option('wpct-erp-forms_api', ['endpoints' => []]);
-        foreach ($setting['endpoints'] as $endpoint) {
-            if ((string) $endpoint['form_id'] === (string) $form_id) {
-                return isset($endpoint['ref']) ? $endpoint['ref'] : null;
+        $setting = get_option('wpct-erp-forms_refs', []);
+        foreach ($setting as $ref_id => $ref) {
+            if ((string) $ref_id === (string) $form_id) {
+                return $ref;
             }
         }
 
@@ -132,14 +162,46 @@ abstract class Integration extends Singleton
 
     public function set_form_ref($form_id, $ref)
     {
-        $setting = get_option('wpct-erp-forms_api', ['endpoints' => []]);
-        for ($i = 0; $i < count($setting['endpoints']); $i++) {
-            if ((string) $setting['endpoints'][$i]['form_id'] === (string) $form_id) {
-                $endpoints[$i]['ref'] = $ref;
-                break;
+        $setting = get_option('wpct-erp-forms_refs', []);
+        $setting[$form_id] = $ref;
+        update_option('wpct-erp-forms_refs', $setting);
+    }
+
+    private function populate_refs($setting)
+    {
+        $refs = get_option('wpct-erp-forms_refs', []);
+        for ($i = 0; $i < count($setting['forms']); $i++) {
+            $form = $setting['forms'][$i];
+            if (!isset($refs[$form['form_id']])) {
+                continue;
             }
+            $form['ref'] = $refs[$form['form_id']];
+            $setting['forms'][$i] = $form;
         }
 
-		update_option('wpct-erp-forms_api', $setting);
+        return $setting;
+    }
+
+    private function rpc_payload($payload)
+    {
+        $setting = Settings::get_setting('wpct-erp-forms', 'rpc-api');
+
+        return [
+            'jsonrpc' => '2.0',
+            'method' => 'call',
+            'id' => time(),
+            'params' => [
+                'service' => 'object',
+                'method' => 'execute',
+                'args' => [
+                    $setting['database'],
+                    $setting['user'],
+                    $setting['password'],
+                    $setting['model'],
+                    'create',
+                    $payload
+                ]
+            ]
+        ];
     }
 }
diff --git a/includes/class-settings.php b/includes/class-settings.php
index 17cb1e7feebfbdb24cf5265516afc2e2b09984f0..82577286c9012487f5c68c74ed926a84e4f9c48b 100644
--- a/includes/class-settings.php
+++ b/includes/class-settings.php
@@ -18,27 +18,31 @@ class Settings extends BaseSettings
 
     public function register()
     {
-        $setting_name = $this->group_name . '_general';
-        $this->register_setting($setting_name, [
-            'notification_receiver' => [
-                'type' => 'string'
-            ],
-        ], [
-            'notification_receiver' => 'admin@' . parse_url(get_bloginfo('url'))['host'],
-        ]);
-
-        $setting_name = $this->group_name . '_api';
+        $host = parse_url(get_bloginfo('url'))['host'];
         $this->register_setting(
-            $setting_name,
+            'general',
             [
-                'protocol' => [
+                'notification_receiver' => [
+                    'type' => 'string',
+                ],
+                'base_url' => [
                     'type' => 'string',
-                    'enum' => [
-                        'JSON-RPC',
-                        'JSON-REST'
-                    ]
                 ],
-                'endpoints' => [
+                'api_key' => [
+                    'type' => 'string',
+                ],
+            ],
+            [
+                'notification_receiver' => 'admin@' . $host,
+                'base_url' => 'https://erp.' . $host,
+                'api_key' => '',
+            ],
+        );
+
+        $this->register_setting(
+            'rest-api',
+            [
+                'forms' => [
                     'type' => 'array',
                     'items' => [
                         'form_id' => 'number',
@@ -48,12 +52,52 @@ class Settings extends BaseSettings
                 ]
             ],
             [
-                'protocol' => 'JSON-RPC',
-                'endpoints' => [
+                'forms' => [
+                    [
+                        'endpoint' => '/api/crm-lead',
+                        'form_id' => null,
+                        'ref' => null
+                    ]
+                ]
+            ]
+        );
+
+        $this->register_setting(
+            'rpc-api',
+            [
+                'endpoint' => [
+                    'type' => 'string'
+                ],
+                'user' => [
+                    'type' => 'string'
+                ],
+                'password' => [
+                    'type' => 'string'
+                ],
+                'database' => [
+                    'type' => 'string'
+                ],
+                'model' => [
+                    'type' => 'string'
+                ],
+                'forms' => [
+                    'type' => 'array',
+                    'items' => [
+                        'form_id' => 'string',
+                        'ref' => 'string'
+                    ]
+                ]
+            ],
+            [
+                'endpoint' => '/jsonrpc',
+                'user' => 'admin',
+                'password' => 'admin',
+                'database' => 'default',
+                'model' => 'crm.lead',
+                'forms' => [
                     [
-                        'endpoint' => '/wp-json/wp/v2',
                         'form_id' => 0,
-                        'ref' => ''
+                        'ref' => null
                     ]
                 ]
             ]
@@ -62,34 +106,20 @@ class Settings extends BaseSettings
 
     protected function input_render($setting, $field, $value)
     {
-        if (preg_match('/^endpoints.*form_id$/', $field)) {
+        if (preg_match('/^forms.*form_id$/', $field)) {
             return $this->render_forms_dropdown($setting, $field, $value);
-        } elseif ($field === 'api_protocol') {
-            return $this->render_protocol_radio($setting, $field, $value);
         }
 
         return parent::input_render($setting, $field, $value);
     }
 
-    private function render_protocol_radio($setting, $field, $value)
-    {
-        $options = ['JSON REST API', 'JSON-RPC'];
-        $fieldset = '<fieldset class="structure-selection">';
-        foreach ($options as $option) {
-            $fieldset .= "<div class='row'><input type='radio' id=name='{$setting}[{$field}]' name='{$setting}[{$field}]' value={$option}><div><label for=name='{$setting}[{$field}]'>Description</div></div>";
-        }
-
-        $fieldset .= '</fieldset>';
-        return $fieldset;
-    }
-
     private function render_forms_dropdown($setting, $field, $value)
     {
         $forms = self::get_forms();
-        $options = array_map(function ($form) use ($value) {
+        $options = array_merge(['<option value=""></option>'], array_map(function ($form) use ($value) {
             $selected = $form->id == $value ? 'selected' : '';
             return "<option value='{$form->id}' {$selected}>{$form->title}</option>";
-        }, $forms);
+        }, $forms));
         return "<select name='{$setting}[{$field}]'>" . implode('', $options) . '</select>';
     }
 }
diff --git a/includes/integrations/wpcf7/class-integration.php b/includes/integrations/wpcf7/class-integration.php
index f04efc81484ae69456092e2532e07a43c0624333..28ccdea78a4c677748151a548b46a35e560f2e5f 100644
--- a/includes/integrations/wpcf7/class-integration.php
+++ b/includes/integrations/wpcf7/class-integration.php
@@ -2,7 +2,7 @@
 
 namespace WPCT_ERP_FORMS\WPCF7;
 
-use WPCT_ERP_FORMS\Abstract\Integration as BaseIntegration;
+use WPCT_ERP_FORMS\Integration as BaseIntegration;
 
 class Integration extends BaseIntegration
 {
@@ -13,22 +13,6 @@ class Integration extends BaseIntegration
         add_filter('wpcf7_before_send_mail', function ($form, &$abort, $submission) {
             $this->do_submission($submission, $form);
         }, 10, 3);
-
-        // add_action('wpcf7_save_contact_form', function ($form, $args, $context) {
-        //     $field = array_filter($form->scan_form_tags(), function ($tag) {
-        //         $field = $this->serialize_field($tag, null);
-        //         return $field['name'] === 'erp_form_ref';
-        //     });
-
-        //     if (sizeof($field) === 0) {
-        //         return;
-        //     } else {
-        //         $field = $field[0];
-        //         $ref = $field->get_option('default')[0];
-        //     }
-
-        //     do_action('wpct_erp_forms_ref', ['form_id' => $form->id(), 'ref' => $ref]);
-        // }, 10, 3);
     }
 
     public function init()
diff --git a/wpct-erp-forms.php b/wpct-erp-forms.php
index 2f63e879e7dd53b5ffdf3d9d1305cfc7444805ac..d75f73628720e523a4e54b858535ac80ec294fbd 100755
--- a/wpct-erp-forms.php
+++ b/wpct-erp-forms.php
@@ -34,7 +34,6 @@ require_once 'wpct-i18n/wpct-i18n.php';
 require_once 'includes/class-integration.php';
 require_once 'includes/class-menu.php';
 require_once 'includes/class-settings.php';
-require_once 'includes/class-rest-controller.php';
 
 class Wpct_Erp_Forms extends BasePlugin
 {
@@ -68,12 +67,13 @@ class Wpct_Erp_Forms extends BasePlugin
             array_unshift($links, $link);
             return $links;
         }, 5, 2);
-
-		new REST_Controller();
     }
 
     public function init()
     {
+        add_filter('option_wpct-http-bridge_general', function () {
+            return Settings::get_setting('wpct-erp-forms', 'general');
+        });
     }
 
     public static function activate()
diff --git a/wpct-http-bridge b/wpct-http-bridge
index 427059d1c82c9506b9471f63c1c5700be7ceb653..f625b3c83f952ff5e2d7c9d10453bab2bed146e3 160000
--- a/wpct-http-bridge
+++ b/wpct-http-bridge
@@ -1 +1 @@
-Subproject commit 427059d1c82c9506b9471f63c1c5700be7ceb653
+Subproject commit f625b3c83f952ff5e2d7c9d10453bab2bed146e3
diff --git a/wpct-i18n b/wpct-i18n
index b4cfb8c2641380f160f5f147f5b6167a4d2fcba3..dfda2d8fc482fc8c8ccbd6e44f77578edd11d88b 160000
--- a/wpct-i18n
+++ b/wpct-i18n
@@ -1 +1 @@
-Subproject commit b4cfb8c2641380f160f5f147f5b6167a4d2fcba3
+Subproject commit dfda2d8fc482fc8c8ccbd6e44f77578edd11d88b