# 18.10 Internal REST Webservice Methods

These Web services allow you to do HTTP requests to the specified endpoints (VTE\_URL/restapi/v1/vtews/METHOD\_NAME).

The requests need POST method, basic authentication (you must set ‘Authentication basic’ into the header which is calculated through a function based on username\* and password\*) and their relative parameters.  
Each one method will give a JSON response with a status and the data or in case of error an error code and its relative message.

**Notes:**  
• The “id” parameter is always specified as ‘moduleid\* x recordid’ (ex: 2x313) moduleid\*: You can get the the moduleid from webservice ‘describe’ method (idPrefix)

**Headers:**   
• Authorization: Basic base64\_encode("username\*:password\*")  
• Content-Type : application/json  
  
username\* (VTE) password\* (User preferences’ Webservice Access Key)

Authorization Example:  
‘Basic ZmVkZXJpY28ucGVybGluOjB5cm5MRjNhS2RhMDZ2c3E=‘

  
**Requirements for Apache2:** • Activate apache rewrite module  
• Set AllowOverride All into the virtualhost file to the vte path folder.   
Example:

```
<Directory /var/www/html/VTE_FOLDER>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Require all granted
</Directory>
```

**Requirements for Nginx + PHP FPM** As Nginx does not handle htaccess file, some special rewrites are needed in order to handle WS requests.  
Below an example of nginx conf file:

```
server {
	listen 80;

	root /var/www/vtenext/;
	
	autoindex off;
	
	index index.php index.html index.htm;

	# Make site accessible from http://localhost/
	
	server_name localhost;

	location / {
		# First attempt to serve request as file, then
		# as directory, then fall back to index.html
		try_files $uri $uri/ index.html;
	}

	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	location ~ [^/]\.php(/|$) {
		include snippets/fastcgi-php.conf;
		
		# With php cgi alone:
		#fastcgi_pass 127.0.0.1:9000;
		
		# With php fpm:
		fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
	}

	# deny access to .htaccess files, if Apache's document root
	# concurs with nginx's one
	location ~ /\.ht {
		deny all;
	}
	
	# special folder handling, since .htaccess files are not supported
	
	# REST API
	
	location /restapi/v1 {
		rewrite ^(.+)/vtews/(.*)$ /restapi/v1/index.php/vtews/$2;
	}

    # Business Portal

    location /portal/v2 {
        rewrite ^\/portal\/v2\/(?!public)(.*)$ /portal/v2/public/$1;
    }
	
	# STORAGE
	
	location /storage {
		deny all;
		
		location /storage/uploads_emails_ {
			allow all;
		}
		
		location /storage/images_uploaded/ {
			allow all;
		}
		
		location ~* /storage/logo/.+\.(jpg|jpeg|png|gif)$ {
			allow all;
		}
		
		rewrite ^/storage/(.*)$ /getStorage.php?file=$1;
	}
	
	# PROTECTED FOLDERS
	
	location /logs {
		deny all;
	}
	
	location /plugins/dataimporter {
		deny all;
	}
	
	location /cache/sys {
		deny all;
	}
	
	location /cache/pdfmaker {
		deny all;
	}
	
	location /cache/import {
		deny all;
	}
	
	location /cache/session {
		deny all;
	}
	
	location /cache/pdf {
		deny all;
	}
	
	location /dataimport {
		deny all;
	}
	
	location /modules/VteSync/VteSyncLib/storage {
		deny all;
	}
	
	location /modules/Messages/src/attachment_tnef/plugins/attachment_tnef/class/ {
		deny all;
	}
	
	# SMARTOPTIMIZER
	
	# disabled by default, enable it if needed
	#location ~* \.(gif|jpe?g|png|swf|css|js|html?|xml|txt|ico)$ {
	#	rewrite ^(.*)$ /smartoptimizer/?$1;
	#}
}

```

**Web Service Methods:**

<div id="bkmrk-name-description-par"><table border="1" cellpadding="5" cellspacing="0" style="width: 100%;" width="100%"><colgroup> <col width="138"></col> <col width="162"></col> <col width="143"></col> <col width="201"></col> </colgroup><tbody><tr><td style="width: 24.1975%;" width="138">**Name**</td><td style="width: 22.4691%;" valign="top" width="162">**Description**</td><td style="width: 22.0988%;" valign="top" width="143">**Parameters**</td><td style="width: 31.1111%;" valign="top" width="201">**Response**</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**create**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Create a record of the specified module</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">elementType (String)element (Encoded)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return all fields and values of the created record</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL/restapi/v1/vtews/create**Parameters**:   
{"elementType":"Accounts", "element":"{\\"accountname\\":\\"account1\\", \\"assigned\_user\_id\\":\\"19x1\\"}"}</td></tr><tr><td rowspan="2" style="width: 24.1975%;" width="138">**update**</td><td style="width: 22.4691%;" valign="top" width="162">Update the specified record</td><td style="width: 22.0988%;" valign="top" width="143">id (String)columns (Encoded)</td><td style="width: 31.1111%;" valign="top" width="201">Return all fields and values of the updated record</td></tr><tr><td colspan="3" style="width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL/restapi/v1/vtews/update**Parameters**:   
{"id":"3x310", "columns":"{\\"accountname\\":\\"test fede postman\\"}"}</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**revise**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Update the specified record. It’s different only for parameters, the result is the same</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">element (Encoded)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return all fields and updated values</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/revise**Parameters**: {"element":"{\\"id\\":\\"3x27\\",\\"employees\\":\\"5\\",\\"industry\\":\\"Banking\\"}"}</td></tr><tr><td bgcolor="#ffffff" rowspan="2" style="background: #ffffff; width: 24.1975%;" width="138">**retrieve**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">Illustrate the fields of the specified record and their relative values</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143">id (String)</td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return all fields and values of the specified record</td></tr><tr><td bgcolor="#ffffff" colspan="3" style="background: #ffffff; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL/restapi/v1/vtews/retrieve**Parameters**:   
{"id":"3x310"}</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**retrieveinventory**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Illustrate the fields of the specified inventory record, their relative values and the product block’s information</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">id (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return all fields and values of the specified record and product’s block information</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/retrieveinventory**Parameters**: {"id":"16x104"}</td></tr><tr><td bgcolor="#ffffff" rowspan="2" style="background: #ffffff; width: 24.1975%;" width="138">**delete**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">Delete the specified record</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143">id (String)</td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return the request status (successful or not)</td></tr><tr><td bgcolor="#ffffff" colspan="3" style="background: #ffffff; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/delete**Parameters**:   
{"id":"3x306"}</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**query**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Execute a query and return the result’s rows</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">query (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return all rows of the executed query</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/query**Parameters**: {"query":"SELECT \* FROM Accounts WHERE accountname like '%vte%';"}</td></tr><tr><td bgcolor="#ffffff" rowspan="2" style="background: #ffffff; width: 24.1975%;" width="138">**listtypes**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">Describe each one module which contains uitype of the specified format</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143">fieldTypeList (Encoded)</td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return module information of the specified fieldtypes</td></tr><tr><td bgcolor="#ffffff" colspan="3" style="background: #ffffff; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/listtypes**Parameters**:{"fieldTypeList":"\[\\"integer\\",\\"file\\"\]"}</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**describe**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Describe the specified module and their relative fields</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">elementType (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return all module information and its fields properties(no hidden fields)</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/describe**Parameters**: {"elementType":"Accounts"}</td></tr><tr><td bgcolor="#ffffff" rowspan="2" style="background: #ffffff; width: 24.1975%;" width="138">**describeall**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">The describeall method is different from describe one because it shows hidden fields too</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143">ElementType (Encoded)</td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return all module information and its fields properties(hidden fields too)</td></tr><tr><td bgcolor="#ffffff" colspan="3" style="background: #ffffff; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/describeall**Parameters**: {"elementType":"Accounts"}</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**getlabels**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Return all labels and translated ones of the specified module,language</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">username (String)language (String)module (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return labels and translated ones of the specified module, language</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/getlabels**Parameters**: {"username":"admin", "language":"it\_it", "module":"Accounts"}</td></tr><tr><td bgcolor="#ffffff" style="background: #ffffff; width: 24.1975%;" width="138">**getlangs**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">Return all languages installed into the CRM</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143"> </td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return all CRM languages</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**loginpwd**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Return user webservice access key if username and password are valid</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">username (String)password (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return user webservice access key</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">  
Ex:**Url**: VTE\_URL//restapi/v1/vtews/loginpwd**Parameters**: {"username":"admin","password":"123456789"}</td></tr><tr><td bgcolor="#ffffff" style="background: #ffffff; width: 24.1975%;" width="138">**getmenulist**</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.4691%;" valign="top" width="162">Return all modules information (visibility, tabid, name, sequence, ...)</td><td bgcolor="#ffffff" style="background: #ffffff; width: 22.0988%;" valign="top" width="143"> </td><td bgcolor="#ffffff" style="background: #ffffff; width: 31.1111%;" valign="top" width="201">Return modules information and properties</td></tr><tr><td bgcolor="#e0efd4" rowspan="2" style="background: #e0efd4; width: 24.1975%;" width="138">**oldoquery**</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.4691%;" valign="top" width="162">Return records that contain the searched value into specified module’s fields</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 22.0988%;" valign="top" width="143">module (String)search\_fields (Encoded)search\_value (String)</td><td bgcolor="#e0efd4" style="background: #e0efd4; width: 31.1111%;" valign="top" width="201">Return some record basic information where searched value is contained into the specified module’s fields</td></tr><tr><td bgcolor="#e0efd4" colspan="3" style="background: #e0efd4; width: 75.679%;" valign="top" width="522">Ex:**Url**: VTE\_URL//restapi/v1/vtews/oldoquery**Parameters**: {"module":"Accounts", "search\_fields":"\[\\"accountname\\", \\"website\\"\]", "search\_value":"vtenext"}</td></tr></tbody></table>

</div>  
Is possibile to register a new custom method with this SDK call:

**SDK::setRestOperation($rest\_name, $handler\_path, $function\_name, $parameters);**

*$rest\_name: method name called by REST webservice*  
*$handler\_path: file path where the funtion is defined*  
*$function\_name: defined function name*  
*$parameters: associative array with parameterName and parameterType*

Example

```PHP
SDK::setRestOperation('check_exists','modules/SDK/examples/RestApi/CustomRestApi.php','vtws_check_exists', array('id'=>'string'));

```