<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wiki.logicaldoc.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blucecio</id>
	<title>LogicalDOC Community Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.logicaldoc.com/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Blucecio"/>
	<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/Special:Contributions/Blucecio"/>
	<updated>2026-05-28T22:38:58Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5342</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5342"/>
		<updated>2025-10-30T07:59:45Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Sample usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|The examples in this article may not work with your LogicalDOC; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
   &amp;quot;folder&amp;quot;:[&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;attributes&amp;quot;:[],&lt;br /&gt;
         &amp;quot;creation&amp;quot;:&amp;quot;2025-10-30 08:54:42 +0100&amp;quot;,&lt;br /&gt;
         &amp;quot;creator&amp;quot;:&amp;quot;Dejah Thoris&amp;quot;,&lt;br /&gt;
         &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
         &amp;quot;hidden&amp;quot;:0,&lt;br /&gt;
         &amp;quot;id&amp;quot;:2794107,&lt;br /&gt;
         &amp;quot;lastModified&amp;quot;:&amp;quot;2025-10-30 08:54:42 +0100&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;:&amp;quot;alpha&amp;quot;,&lt;br /&gt;
         &amp;quot;parentId&amp;quot;:4,&lt;br /&gt;
         &amp;quot;position&amp;quot;:1,&lt;br /&gt;
         &amp;quot;securityRef&amp;quot;:1069,&lt;br /&gt;
         &amp;quot;templateId&amp;quot;:null,&lt;br /&gt;
         &amp;quot;templateLocked&amp;quot;:0,&lt;br /&gt;
         &amp;quot;type&amp;quot;:0&lt;br /&gt;
      },&lt;br /&gt;
      {&lt;br /&gt;
         &amp;quot;attributes&amp;quot;:[],&lt;br /&gt;
         &amp;quot;creation&amp;quot;:&amp;quot;2025-10-30 08:54:49 +0100&amp;quot;,&lt;br /&gt;
         &amp;quot;creator&amp;quot;:&amp;quot;Dejah Thoris&amp;quot;,&lt;br /&gt;
         &amp;quot;description&amp;quot;:&amp;quot;&amp;quot;,&lt;br /&gt;
         &amp;quot;hidden&amp;quot;:0,&lt;br /&gt;
         &amp;quot;id&amp;quot;:2794108,&lt;br /&gt;
         &amp;quot;lastModified&amp;quot;:&amp;quot;2025-10-30 08:54:49 +0100&amp;quot;,&lt;br /&gt;
         &amp;quot;name&amp;quot;:&amp;quot;beta&amp;quot;,&lt;br /&gt;
         &amp;quot;parentId&amp;quot;:4,&lt;br /&gt;
         &amp;quot;position&amp;quot;:1,&lt;br /&gt;
         &amp;quot;securityRef&amp;quot;:1069,&lt;br /&gt;
         &amp;quot;templateId&amp;quot;:null,&lt;br /&gt;
         &amp;quot;templateLocked&amp;quot;:0,&lt;br /&gt;
         &amp;quot;type&amp;quot;:0&lt;br /&gt;
      }&lt;br /&gt;
   ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enterprise Methods ==&lt;br /&gt;
Additional search methods available in commercial versions of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Searches ===&lt;br /&gt;
&lt;br /&gt;
This call will query the document table and count the documents in folder: /Default (folder ID = 4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -X POST &amp;quot;http://localhost:8080/services/rest/enterpriseSearch/queryDocuments&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;select=COUNT(*)&amp;amp;where=DOC.ld_folderid%3D4&amp;amp;maxResults=2000000&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5339</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5339"/>
		<updated>2025-08-22T13:14:54Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Enterprise Searches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|The examples in this article may not work with your LogicalDOC; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enterprise Methods ==&lt;br /&gt;
Additional search methods available in commercial versions of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Searches ===&lt;br /&gt;
&lt;br /&gt;
This call will query the document table and count the documents in folder: /Default (folder ID = 4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -X POST &amp;quot;http://localhost:8080/services/rest/enterpriseSearch/queryDocuments&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;select=COUNT(*)&amp;amp;where=DOC.ld_folderid%3D4&amp;amp;maxResults=2000000&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5338</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5338"/>
		<updated>2025-08-22T13:14:05Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Enterprise Searches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|The examples in this article may not work with your LogicalDOC; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enterprise Methods ==&lt;br /&gt;
Additional search methods available in commercial versions of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Searches ===&lt;br /&gt;
&lt;br /&gt;
This call will query the document table and count the documents in folder: /Default (folder ID = 4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -X POST &amp;quot;http://localhost:8080/services/rest/enterpriseSearch/queryDocuments&amp;quot; \&lt;br /&gt;
               -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
               -d &amp;quot;select=COUNT(*)&amp;amp;where=DOC.ld_folderid%3D4&amp;amp;maxResults=2000000&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5337</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5337"/>
		<updated>2025-08-22T13:13:26Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: Added enterpriseSearch example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|The examples in this article may not work with your LogicalDOC; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enterprise Methods ==&lt;br /&gt;
Additional search methods available in commercial versions of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
=== Enterprise Searches ===&lt;br /&gt;
&lt;br /&gt;
This call will query the document table and count the documents in folder: /Default (folder ID = 4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -X POST &amp;quot;http://localhost:8080/services/rest/enterpriseSearch/queryDocuments&amp;quot; \&lt;br /&gt;
               -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
               -d &amp;quot;select=COUNT(*)&amp;amp;where=DOC.ld_folderid%3D4&amp;amp;maxResults=2000000&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Docker_Migration&amp;diff=5336</id>
		<title>Docker Migration</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Docker_Migration&amp;diff=5336"/>
		<updated>2025-08-18T13:15:36Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: added category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
Sometimes you want to migrate your running Docker container to another more recent image(but same LogicalDOC&#039;s application version). This How-To describe a plan to migrate a LogicalDOC Docker installation to another container, please note that this activity is delicate and may lead to data loss.&lt;br /&gt;
&lt;br /&gt;
{{Advice|This guide refers to a basic single-server deployment scenario. &amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Please be aware that this procedure is not covered by the standard support contract&amp;lt;/u&amp;gt;.&amp;lt;/b&amp;gt; &amp;lt;u&amp;gt;In case something goes wrong during the migration process, the support team cannot offer any help and LogicalDOC is not liable for any data loss&amp;lt;/u&amp;gt;.&amp;lt;br/&amp;gt; In case you want this delicate matter to be handled professionally, please write to sales@logicaldoc.com for a quote.}}&lt;br /&gt;
&lt;br /&gt;
== Assumptions ==&lt;br /&gt;
* Both the current container and the new one are the &amp;lt;b&amp;gt;same version&amp;lt;/b&amp;gt;.&lt;br /&gt;
* Both the current container and the new one use the &amp;lt;b&amp;gt;same database engine&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definitions ==&lt;br /&gt;
* &#039;&#039;&#039;logicaldoc&#039;&#039;&#039;: represents the name of the current container of the installation to migrate&lt;br /&gt;
* &#039;&#039;&#039;logicaldoc_new&#039;&#039;&#039;: represents the name of the new container&lt;br /&gt;
&lt;br /&gt;
== Step 1: Backup of the relevant files and folders from current container ==&lt;br /&gt;
* Extract the relevant files and folders with these commands:&lt;br /&gt;
 $ docker cp logicaldoc:/LogicalDOC/conf conf&lt;br /&gt;
 $ docker cp logicaldoc:/LogicalDOC/repository repository&lt;br /&gt;
&lt;br /&gt;
== Step 2: Stop the current container ==&lt;br /&gt;
docker stop logicaldoc&lt;br /&gt;
&lt;br /&gt;
== Step 3: Run the new container ==&lt;br /&gt;
&amp;lt;u&amp;gt;It is really important to install the same version of LogicalDOC as the old system and also provide the same database connection parameters and port mappings.&amp;lt;/u&amp;gt;&lt;br /&gt;
* Assuming your release is the 8.9.3, this could be a sample command to run the new container:&lt;br /&gt;
 $ docker run -d --name=&#039;&#039;&#039;logicaldoc_new&#039;&#039;&#039; -p 8080:8080 --env LDOC_USERNO=&#039;&#039;&#039;&amp;lt;YOUR_LICENSE_CODE&amp;gt;&#039;&#039;&#039; --env DB_ENGINE=mysql --env DB_HOST=logicaldoc-db --link logicaldoc-db logicaldoc/logicaldoc:&#039;&#039;&#039;8.9.3&#039;&#039;&#039;&lt;br /&gt;
* Wait the new contained to complete the installation, check you are able to log into LogicalDOC as user admin like you used to do in the old container.&lt;br /&gt;
&lt;br /&gt;
== Step 4: Restore the relevant file in the new contanier ==&lt;br /&gt;
* Now, with the new container up and running, restore the files backed but from the old system&lt;br /&gt;
 $ docker cp conf/.  logicaldoc_new:/LogicalDOC/conf&lt;br /&gt;
 $ docker cp repository/.  logicaldoc_new:/LogicalDOC/repository&lt;br /&gt;
&lt;br /&gt;
== Step 4: Rename the containers ==&lt;br /&gt;
* These instructions will rename the containers so that the new one will replace the old one&lt;br /&gt;
 $ docker rename logicaldoc logicaldoc_old&lt;br /&gt;
 $ docker rename logicaldoc_new logicaldoc&lt;br /&gt;
&lt;br /&gt;
[[Category: Migration]]&lt;br /&gt;
[[Category: Docker]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Main_Page&amp;diff=5328</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Main_Page&amp;diff=5328"/>
		<updated>2025-05-30T14:26:19Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid rgb(170, 170, 170); padding: 0.4em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Welcome to the &#039;&#039;&#039;LogicalDOC&#039;&#039;&#039;&amp;lt;sup&amp;gt;™&amp;lt;/sup&amp;gt; Wiki&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;10&amp;quot; align=&amp;quot;center&amp;quot; class=&amp;quot;logicaldoc_table&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;Users&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app display.png]]&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
*[http://docs.logicaldoc.com User Guides] &lt;br /&gt;
*[http://issues.logicaldoc.com Reporting bugs and feature requests] &lt;br /&gt;
*[http://forums.logicaldoc.com Community Forums]&lt;br /&gt;
*[[Translate LogicalDOC|Translate LogicalDOC]] &lt;br /&gt;
*[[CMIS|CMIS Interface]]&lt;br /&gt;
*[[WebDAV|WebDAV Interface]]&lt;br /&gt;
*[[LogicalDOC Joomla Explorer|LogicalDOC Joomla explorer]]&lt;br /&gt;
*[[LogicalDOC WordPress Explorer|LogicalDOC WordPress explorer]]&lt;br /&gt;
*[[Connect_Webex_Audio|Connect Webex Audio]]&lt;br /&gt;
*[[Release Notes|Release Notes]]  &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;System Administrators&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app terminal.png]]&amp;lt;br&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
*[[Quick Install]]&lt;br /&gt;
*[[Installation using MySQL database|Installation using MySQL]] &lt;br /&gt;
*[[Installation using Oracle|Installation using Oracle]] &lt;br /&gt;
*[[Docker|LogicalDOC Docker container]]&lt;br /&gt;
*[[Virtual Appliance|Virtual Appliance]]&lt;br /&gt;
*[[MySQL_Timezone|MySQL timezone issue]]&lt;br /&gt;
*[[SSL_Configuration_using_Certificate|SSL Configuration using Certificate]]&lt;br /&gt;
*[[SSL_Configuration_using_Java_Keystore|SSL Configuration using Java Keystore]]&lt;br /&gt;
*[[SwitchToJava11|Switch from Java8 to Java11 on Windows]]&lt;br /&gt;
&amp;lt;!-- *[[Switch_To_Java_11_on_Synology_and_QNAP|Switch from Java8 to Java11 on Synology and QNAP]] --&amp;gt;&lt;br /&gt;
*[[Switch_to_Java17_on_Windows|Switch from Java11 to Java17 on Windows]]&lt;br /&gt;
*[[Switch_to_Java17_on_Linux|Switch from Java11 to Java17 on Linux]]&lt;br /&gt;
*[[Switch_to_Java21_on_Windows|Switch from Java17 to Java21 on Windows]]&lt;br /&gt;
*[[Switch_to_Java21_on_Linux|Switch from Java17 to Java21 on Linux]]&lt;br /&gt;
*[[Tuning_Memory_Usage_On_Windows|Tuning memory usage on Windows]]&lt;br /&gt;
*[[Changing_Java_Virtual_Machine_On_Windows|Changing the Java Virtual Machine on Windows]]&lt;br /&gt;
*[[Java Options|Java Options]] &lt;br /&gt;
*[[Server Migration|How to migrate to a new server]]&lt;br /&gt;
*[[Docker Migration|How to migrate to a new docker container]]&lt;br /&gt;
*[[How to configure an Apache load balancer]]&lt;br /&gt;
*[[IndexConverter|How to prepare the Index for the next generation LogicalDOC 8.5]]&lt;br /&gt;
*[[Upgrade Tesseract OCR|Upgrade Tesseract OCR]]&lt;br /&gt;
*[[Upgrade Docker container|Recommended Update Procedure for Docker container]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;Developers&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents_small&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app tutorials.png]] &lt;br /&gt;
| &lt;br /&gt;
*[[Web Services|Web Services API]] &lt;br /&gt;
*[[RESTful Guide with curl|RESTful Guide with curl]] &lt;br /&gt;
*[[Building from sources|Building from the Sources]]&lt;br /&gt;
*[[Developer Guide|Developer Guide]]&lt;br /&gt;
*[[Java_Options|Java Options]]&lt;br /&gt;
*[[Plug-in System|Plug-in System]] &lt;br /&gt;
*[[Blueprints|Blueprints]] &lt;br /&gt;
*[http://logicaldoc.sourceforge.net/site/ Maven2 generated Site] &lt;br /&gt;
*[[BPM: Workflowsystem|BPM Workflow System]] &lt;br /&gt;
*[[Architecture|Architecture]]&lt;br /&gt;
*[[Benchmark LogicalDOC|Benchmark]]   &lt;br /&gt;
*[[External Authentication|External Authentication]]&lt;br /&gt;
*[[Store filenames with emoticons|Store filenames with emoticons]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &#039;&#039;&#039;LogicalDOC&#039;&#039;&#039; is a Web-based, open source document management software that is very simple to use and suitable for organizations of any size and type.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
LogicalDOC uses the best-of-breed Java technologies such as Spring, Hibernate and AJAX and can run on any system, from Windows to Linux or MAC OS X. &lt;br /&gt;
&lt;br /&gt;
The features included in the community edition — including workflow light, version control and the full-text search engine - help manage the document lifecycle, encourage cooperation, allow to quickly find the document you need without wasting time. &lt;br /&gt;
&lt;br /&gt;
The application is implemented as a plugin system that allows you to easily add new features through the ability to engage the various extension points predisposed. Moreover, the presence of Web services ensures that LogicalDOC can be easily integrated with other systems. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; LogicalDOC Community Edition is licensed under the [http://www.gnu.org/licenses/lgpl-3.0.html GNU LGPL version 3.0] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; LogicalDOC is available in several flavors: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[https://www.logicaldoc.com/download-logicaldoc-community LogicalDOC Community Edition]:&#039;&#039;&#039; A free download, with access to the source code under the LGPLv3 open source license &lt;br /&gt;
*&#039;&#039;&#039;[https://www.logicaldoc.com/try LogicalDOC Enterprise Edition]:&#039;&#039;&#039; A full-featured and commercially supported edition of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.logicaldoc.com/product/overview &#039;&#039;&#039;About LogicalDOC&#039;&#039;&#039;] | [https://www.logicaldoc.com/try &#039;&#039;&#039;Download Software&#039;&#039;&#039;] | [https://www.logicaldoc.com/support/professional-support &#039;&#039;&#039;Professional Support&#039;&#039;&#039;] | [http://docs.logicaldoc.com &#039;&#039;&#039;Documentation&#039;&#039;&#039;] &amp;lt;br&amp;gt;  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Main_Page&amp;diff=5324</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Main_Page&amp;diff=5324"/>
		<updated>2025-05-30T13:14:20Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;border: 1px solid rgb(170, 170, 170); padding: 0.4em; background-color: rgb(238, 238, 238);&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 150%;&amp;quot;&amp;gt;Welcome to the &#039;&#039;&#039;LogicalDOC&#039;&#039;&#039;&amp;lt;sup&amp;gt;™&amp;lt;/sup&amp;gt; Wiki&amp;lt;/span&amp;gt; &lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;10&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;Users&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app display.png]]&amp;lt;br&amp;gt; &lt;br /&gt;
| &lt;br /&gt;
*[http://docs.logicaldoc.com User Guides] &lt;br /&gt;
*[http://issues.logicaldoc.com Reporting bugs and feature requests] &lt;br /&gt;
*[http://forums.logicaldoc.com Community Forums]&lt;br /&gt;
*[[Translate LogicalDOC|Translate LogicalDOC]] &lt;br /&gt;
*[[CMIS|CMIS Interface]]&lt;br /&gt;
*[[WebDAV|WebDAV Interface]]&lt;br /&gt;
*[[LogicalDOC Joomla Explorer|LogicalDOC Joomla explorer]]&lt;br /&gt;
*[[LogicalDOC WordPress Explorer|LogicalDOC WordPress explorer]]&lt;br /&gt;
*[[Connect_Webex_Audio|Connect Webex Audio]]&lt;br /&gt;
*[[Release Notes|Release Notes]]  &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;System Administrators&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app terminal.png]]&amp;lt;br&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
*[[Quick Install]]&lt;br /&gt;
*[[Installation using MySQL database|Installation using MySQL]] &lt;br /&gt;
*[[Installation using Oracle|Installation using Oracle]] &lt;br /&gt;
*[[Docker|LogicalDOC Docker container]]&lt;br /&gt;
*[[Virtual Appliance|Virtual Appliance]]&lt;br /&gt;
*[[MySQL_Timezone|MySQL timezone issue]]&lt;br /&gt;
*[[SSL_Configuration_using_Certificate|SSL Configuration using Certificate]]&lt;br /&gt;
*[[SSL_Configuration_using_Java_Keystore|SSL Configuration using Java Keystore]]&lt;br /&gt;
*[[SwitchToJava11|Switch from Java8 to Java11 on Windows]]&lt;br /&gt;
&amp;lt;!-- *[[Switch_To_Java_11_on_Synology_and_QNAP|Switch from Java8 to Java11 on Synology and QNAP]] --&amp;gt;&lt;br /&gt;
*[[Switch_to_Java17_on_Windows|Switch from Java11 to Java17 on Windows]]&lt;br /&gt;
*[[Switch_to_Java17_on_Linux|Switch from Java11 to Java17 on Linux]]&lt;br /&gt;
*[[Switch_to_Java21_on_Windows|Switch from Java17 to Java21 on Windows]]&lt;br /&gt;
*[[Switch_to_Java21_on_Linux|Switch from Java17 to Java21 on Linux]]&lt;br /&gt;
*[[Tuning_Memory_Usage_On_Windows|Tuning memory usage on Windows]]&lt;br /&gt;
*[[Changing_Java_Virtual_Machine_On_Windows|Changing the Java Virtual Machine on Windows]]&lt;br /&gt;
*[[Java Options|Java Options]] &lt;br /&gt;
*[[Server Migration|How to migrate to a new server]]&lt;br /&gt;
*[[Docker Migration|How to migrate to a new docker container]]&lt;br /&gt;
*[[How to configure an Apache load balancer]]&lt;br /&gt;
*[[IndexConverter|How to prepare the Index for the next generation LogicalDOC 8.5]]&lt;br /&gt;
*[[Upgrade Tesseract OCR|Upgrade Tesseract OCR]]&lt;br /&gt;
*[[Upgrade Docker container|Recommended Update Procedure for Docker container]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
&lt;br /&gt;
| width=&amp;quot;33%&amp;quot; valign=&amp;quot;top&amp;quot; class=&amp;quot;logicaldoc_hubbox&amp;quot; | &amp;lt;div class=&amp;quot;logicaldoc_hubtitle&amp;quot;&amp;gt;&#039;&#039;&#039;Developers&#039;&#039;&#039;&amp;lt;/div&amp;gt; &amp;lt;div class=&amp;quot;logicaldoc_boxcontents_small&amp;quot;&amp;gt;&lt;br /&gt;
{| cellpadding=&amp;quot;3&amp;quot; style=&amp;quot;margin: 0pt;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | [[Image:80px-Crystal Clear app tutorials.png]] &lt;br /&gt;
| &lt;br /&gt;
*[[Web Services|Web Services API]] &lt;br /&gt;
*[[RESTful Guide with curl|RESTful Guide with curl]] &lt;br /&gt;
*[[Building from sources|Building from the Sources]]&lt;br /&gt;
*[[Developer Guide|Developer Guide]]&lt;br /&gt;
*[[Java_Options|Java Options]]&lt;br /&gt;
*[[Plug-in System|Plug-in System]] &lt;br /&gt;
*[[Blueprints|Blueprints]] &lt;br /&gt;
*[http://logicaldoc.sourceforge.net/site/ Maven2 generated Site] &lt;br /&gt;
*[[BPM: Workflowsystem|BPM Workflow System]] &lt;br /&gt;
*[[Architecture|Architecture]]&lt;br /&gt;
*[[Benchmark LogicalDOC|Benchmark]]   &lt;br /&gt;
*[[External Authentication|External Authentication]]&lt;br /&gt;
*[[Store filenames with emoticons|Store filenames with emoticons]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &#039;&#039;&#039;LogicalDOC&#039;&#039;&#039; is a Web-based, open source document management software that is very simple to use and suitable for organizations of any size and type.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
LogicalDOC uses the best-of-breed Java technologies such as Spring, Hibernate and AJAX and can run on any system, from Windows to Linux or MAC OS X. &lt;br /&gt;
&lt;br /&gt;
The features included in the community edition — including workflow light, version control and the full-text search engine - help manage the document lifecycle, encourage cooperation, allow to quickly find the document you need without wasting time. &lt;br /&gt;
&lt;br /&gt;
The application is implemented as a plugin system that allows you to easily add new features through the ability to engage the various extension points predisposed. Moreover, the presence of Web services ensures that LogicalDOC can be easily integrated with other systems. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; LogicalDOC Community Edition is licensed under the [http://www.gnu.org/licenses/lgpl-3.0.html GNU LGPL version 3.0] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; LogicalDOC is available in several flavors: &lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[https://www.logicaldoc.com/download-logicaldoc-community LogicalDOC Community Edition]:&#039;&#039;&#039; A free download, with access to the source code under the LGPLv3 open source license &lt;br /&gt;
*&#039;&#039;&#039;[https://www.logicaldoc.com/try LogicalDOC Enterprise Edition]:&#039;&#039;&#039; A full-featured and commercially supported edition of LogicalDOC&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
[https://www.logicaldoc.com/product/overview &#039;&#039;&#039;About LogicalDOC&#039;&#039;&#039;] | [https://www.logicaldoc.com/try &#039;&#039;&#039;Download Software&#039;&#039;&#039;] | [https://www.logicaldoc.com/support/professional-support &#039;&#039;&#039;Professional Support&#039;&#039;&#039;] | [http://docs.logicaldoc.com &#039;&#039;&#039;Documentation&#039;&#039;&#039;] &amp;lt;br&amp;gt;  &lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5322</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5322"/>
		<updated>2025-05-30T09:58:56Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Upload Resource */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5321</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5321"/>
		<updated>2025-05-30T09:53:55Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Convert a document to PDF */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5320</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5320"/>
		<updated>2025-05-30T09:53:04Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Delete */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5319</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5319"/>
		<updated>2025-05-30T09:51:12Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Download */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5318</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5318"/>
		<updated>2025-05-30T09:50:41Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Update metadata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5317</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5317"/>
		<updated>2025-05-30T09:50:18Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Create via Upload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5316</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5316"/>
		<updated>2025-05-30T09:49:40Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Versioning */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5315</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5315"/>
		<updated>2025-05-30T09:49:05Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5314</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5314"/>
		<updated>2025-05-30T09:48:35Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5313</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5313"/>
		<updated>2025-05-30T09:47:56Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Create a Document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5312</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5312"/>
		<updated>2025-05-30T09:46:26Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Sample usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5311</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5311"/>
		<updated>2025-05-30T09:45:10Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Folder */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5310</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5310"/>
		<updated>2025-05-30T09:44:00Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Sample usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5309</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5309"/>
		<updated>2025-05-30T09:43:14Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Sample usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5308</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5308"/>
		<updated>2025-05-28T15:48:09Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Upload Resource */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1.0&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5307</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5307"/>
		<updated>2025-05-28T15:46:33Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Upload Resource */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tile, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tile image (suffix: tile.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5306</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5306"/>
		<updated>2025-05-28T14:43:49Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: added refs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tail, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tail (suffix: tail.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/9.1.1/index.html LogicalDOC REST API reference v9.1.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5305</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=5305"/>
		<updated>2025-05-28T14:42:16Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: Added Upload Resource example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Upload Resource ==&lt;br /&gt;
&lt;br /&gt;
Uploads a resource of an existing document: thumbnail, tail, or preview.&amp;lt;br/&amp;gt;&lt;br /&gt;
The following example uploads the tail (suffix: tail.png)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -X &amp;quot;POST&amp;quot; ^&lt;br /&gt;
  &amp;quot;http://localhost:8080/services/rest/document/uploadResource&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;accept: */*&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; ^&lt;br /&gt;
  -H &amp;quot;Content-Type: multipart/form-data&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;docId=10075&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;fileVersion=1&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;suffix=tile.png&amp;quot; ^&lt;br /&gt;
  -F &amp;quot;content=@folder32.png;type=image/png&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=5110</id>
		<title>Bindings And Samples</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=5110"/>
		<updated>2025-05-07T16:04:39Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== JAVA Examples  ==&lt;br /&gt;
&lt;br /&gt;
On SourceForge we have released an example project that Tests the WS features of LD and simultaneously shows the WS invocations with JAVA&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 407px; height: 117px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-9.0/logicaldoc-webservicesamples-9.0.zip/download logicaldoc-webservicesamples-9.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/logicaldoc-webservicesamples-8.3.4.zip/download logicaldoc-webservicesamples-8.3.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.3/Java-webserviceTests-8.3.zip/download Java-webserviceTests-8.3.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.0/Java-webserviceTests-8.0.0.zip/download Java-webserviceTests-8.0.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-7.6/webserviceTests-Java.zip/download webserviceTests-Java.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/samples-7.5/Java-webserviceTests-7.5.2.zip/download Java-webserviceTests-7.5.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.4.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/Java-webserviceTests-7.4.zip/download Java-webserviceTests-7.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.1.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/Java-webserviceTests-7.1.0.zip/download Java-webserviceTests-7.1.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/Java-webserviceTests-6.8.0.zip/download Java-WebServicesTests-6.8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/Java-webserviceTests-6.7.1.zip/download Java-WebServicesTests-6.7.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/Java-WebServicesTests-6.6.2.zip/download Java-WebServicesTests-6.6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/Java-WebServicesTests-6.5.1.zip/download Java-WebServicesTests-6.5.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.4 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/Java-WebServicesTests-6.4.zip/download Java-WebServicesTests-6.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.2 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.2/Java-WebServicesTests-6.2.zip/download Java-WebServicesTests-6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/Java-webserviceTests-6.0.zip/download Java-WebServicesTests-6.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/Java-webserviceTests-5.1.zip/download Java-WebServicesTests-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== .NET Integration  ==&lt;br /&gt;
&lt;br /&gt;
This is a sample Visual Studio 2008/2010 project created to illustrate some C# .NET 4.0/2.0 invocations of the LogicalDOC web-services&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 508px; height: 102px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD&amp;amp;nbsp;version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample package&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Visual Studio&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/dotNET2WSClient4-8.7.1.zip/download dotNET2WSClient4-8.7.1.zip]&lt;br /&gt;
| VS 2017&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/dotNET2WSClient4-8.3.zip/download dotNET2WSClient4-8.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Includes an example of creating AttributeSets and Templates&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/dotNET2WSClient4-8.2.1.zip/download dotNET2WSClient4-8.2.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Complete example of full-text search with custom attributes&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/dotNET2WSClient4-8.1.1.zip/download dotNET2WSClient4-8.1.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Full-text search with search in sub-folder&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/dotNET2WSClient4-7.7.3.zip/download dotNET2WSClient4-7.7.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.5&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/dotNET4_WSClient-7.5.zip/download dotNET4_WSClient-7.5.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/dotNET-WSExamples-7.1.zip/download dotNET-WSExamples-7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/dotNET2WSClient-6.8.4.zip/download dotNET2WSClient-6.8.4.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/dotNET2WSClient-6.7.1.zip/download dotNET2WSClient-6.7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/dotNET-WSClient-6.6.2.zip/download dotNET-WSClient-6.6.2.zip]&lt;br /&gt;
| Visual Studio 2010 project&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/dotNET-WSClient-6.5.2.zip/download dotNET-WSClient-6.5.2.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/dotNET-webservice-client-6.4.zip/download dotNET-webservice-client-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/dotNET2WSClient-6.0.zip/download dotNET2WSClient-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.2.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.2/dotNET2WSClient-5.2.1.zip/download dotNET2WSClient-5.2.1.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.0/dotNET2WSClient-5.0.zip/download dotNET2WSClient-5.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Integration  ==&lt;br /&gt;
&lt;br /&gt;
The Web-Services of LogicalDOC are compatibles with PHP 8.2 &amp;lt;br&amp;gt;&lt;br /&gt;
The example package contains scripts for invoking the LogicalDOC API via SOAP and REST webservice.&amp;lt;br&amp;gt;&lt;br /&gt;
As always you can download it from SourceForge.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;PHP version&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.8.6&amp;lt;br&amp;gt; &lt;br /&gt;
|8.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.8/PHP-logicaldoc-webservices-886.zip/download PHP-logicaldoc-webservices-886]&lt;br /&gt;
| Changes: fixed document creation via SOAP with LD 8.3 and higher&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
|7.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/PHP-SOAP_webservice-873.zip/download PHP-SOAP_webservice-873.zip]&lt;br /&gt;
| Changes: Chunk upload for large files&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/PHP-SOAP_webservice-842.zip/download PHP-SOAP_webservice-842.zip]&lt;br /&gt;
| Changes: REST methods invocations&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/PHP-SOAP_webservice-8.2.1.zip/download PHP-SOAP_webservice-8.2.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/PHP-SOAP_webservice-8.1.1.zip/download PHP-SOAP_webservice-8.1.1.zip]&lt;br /&gt;
| Changes: updated example for recursive download&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.0/PHP-SOAP_webservice-8.0.zip/download PHP-SOAP_webservice-8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/PHP-SOAP_webservice-77.zip/download PHP-SOAP_webservice-77.zip]&lt;br /&gt;
| Changes: Removed field title in WSDocument&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/PHP-SOAP_webservice-7.5.zip/download PHP-SOAP_webservice-7.5.zip]&lt;br /&gt;
| Changes: Important changes in WSDocument fields (attributes), new REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 7.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/PHP-SOAP_webservice-7.4-R02.zip/download PHP-SOAP_webservice-7.4-R02.zip]&lt;br /&gt;
| Changes: Some changes in the WSDocument and WSFolder fields, new REST examples, new samples of Enterprise Search (parametric search)&lt;br /&gt;
|-&lt;br /&gt;
| 7.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.2/PHP-SOAP_webservice-7.2.zip/download PHP-SOAP_webservice-7.2.zip]&lt;br /&gt;
| Changes: Creating a folder from template with related metadata&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.0/PHP-SOAP_webservice-7.0.zip/download PHP-SOAP_webservice-7.0.zip]&lt;br /&gt;
| Changes: updated Search fullText examples, new Enterprise parametric search, Document download alias, Document download REST (big files), mini application in PHP, shows the latest document created/updated&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.4.zip/download PHP-SOAP_webservice-6.8.4.zip]&lt;br /&gt;
| Changes: search by parameters (EnterpriseSearch), full-text search on template fields, getTemplate by name (DocumentMeta)&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.3&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.3.zip/download PHP-SOAP_webservice-6.8.3.zip]&lt;br /&gt;
| Changes: new mini application in PHP, performs the research and presents a list of results for download&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/PHP-SOAP_webservice-6.8.1.zip/download PHP-SOAP_webservice-6.8.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/PHP-SOAP_webservice-6.7.1.zip/download PHP-SOAP_webservice-6.7.1.zip]&lt;br /&gt;
| Changes in: Search_parametric.php and Folder_workspaces.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/PHP-SOAP_webservice-6.6.2.zip/download PHP-SOAP_webservice-6.6.2.zip]&lt;br /&gt;
| New examples: Search_parametric.php and Document_createBinaryWithTemplate.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.2.zip/download PHP-SOAP_webservice-6.5.2.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.1.zip/download PHP-SOAP_webservice-6.5.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/PHP-SOAP_webservice-6.4.zip/download PHP-SOAP_webservice-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
| Of particular interest is the new example Folder_downloadRecursively.php that lets you perform full backup of the repository starting from a given folder&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/PHP-SOAP_webservice-6.0.zip/download PHP-SOAP_webservice-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1&amp;lt;br&amp;gt;&lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/PHP-SOAP_webservice-5.1.zip/download PHP-SOAP_webservice-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python  ==&lt;br /&gt;
A set of examples in Python to use the new REST APIs available from LogicalDOC since version 7.5&amp;lt;br/&amp;gt; &lt;br /&gt;
3.11.4 is the version of Python that we used to create and test the latest scripts.&amp;lt;br/&amp;gt; &lt;br /&gt;
These can be run from the command line on Windows: python &amp;lt;SCRIPT_FILENAME&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
Be aware that you might have to change the address and port of your LogicalDOC or the login credentials.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-9.1/Python-logicaldoc-webservices-911.zip/download Python-logicaldoc-webservices-911.zip]&lt;br /&gt;
| Added call examples with API-KEY&amp;lt;br/&amp;gt;New example Copying document and resources from source LogicalDOC A to target LogicalDOC B&lt;br /&gt;
|-&lt;br /&gt;
| 8.9.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.9/Python-logicaldoc-webservices-891.zip/download Python-logicaldoc-webservices-891.zip]&lt;br /&gt;
| Added Reading Request SOAP and REST examples&amp;lt;br/&amp;gt;Added listUsers and StoreUser SOAP examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.4&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.7/Python-samples-8.7.4.zip/download Python-samples-8.7.4.zip]&lt;br /&gt;
| Added Enterprise Search REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/Python-samples-873.zip/download Python-samples-873.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/Python-samples-842.zip/download Python-samples-842.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/Python-samples-77.zip/download Python-samples-77.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/Python-samples-751.zip/download Python-samples-751.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://wiki.logicaldoc.com/rest/ http://wiki.logicaldoc.com/rest/]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=5109</id>
		<title>Bindings And Samples</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=5109"/>
		<updated>2025-05-07T16:03:54Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== JAVA Examples  ==&lt;br /&gt;
&lt;br /&gt;
On SourceForge we have released an example project that Tests the WS features of LD and simultaneously shows the WS invocations with JAVA&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 407px; height: 117px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 9.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-9.0/logicaldoc-webservicesamples-9.0.zip/download logicaldoc-webservicesamples-9.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/logicaldoc-webservicesamples-8.3.4.zip/download logicaldoc-webservicesamples-8.3.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.3/Java-webserviceTests-8.3.zip/download Java-webserviceTests-8.3.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.0/Java-webserviceTests-8.0.0.zip/download Java-webserviceTests-8.0.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-7.6/webserviceTests-Java.zip/download webserviceTests-Java.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/samples-7.5/Java-webserviceTests-7.5.2.zip/download Java-webserviceTests-7.5.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.4.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/Java-webserviceTests-7.4.zip/download Java-webserviceTests-7.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.1.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/Java-webserviceTests-7.1.0.zip/download Java-webserviceTests-7.1.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/Java-webserviceTests-6.8.0.zip/download Java-WebServicesTests-6.8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/Java-webserviceTests-6.7.1.zip/download Java-WebServicesTests-6.7.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/Java-WebServicesTests-6.6.2.zip/download Java-WebServicesTests-6.6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/Java-WebServicesTests-6.5.1.zip/download Java-WebServicesTests-6.5.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.4 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/Java-WebServicesTests-6.4.zip/download Java-WebServicesTests-6.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.2 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.2/Java-WebServicesTests-6.2.zip/download Java-WebServicesTests-6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/Java-webserviceTests-6.0.zip/download Java-WebServicesTests-6.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/Java-webserviceTests-5.1.zip/download Java-WebServicesTests-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== .NET Integration  ==&lt;br /&gt;
&lt;br /&gt;
This is a sample Visual Studio 2008/2010 project created to illustrate some C# .NET 4.0/2.0 invocations of the LogicalDOC web-services&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 508px; height: 102px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD&amp;amp;nbsp;version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample package&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Visual Studio&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/dotNET2WSClient4-8.7.1.zip/download dotNET2WSClient4-8.7.1.zip]&lt;br /&gt;
| VS 2017&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/dotNET2WSClient4-8.3.zip/download dotNET2WSClient4-8.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Includes an example of creating AttributeSets and Templates&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/dotNET2WSClient4-8.2.1.zip/download dotNET2WSClient4-8.2.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Complete example of full-text search with custom attributes&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/dotNET2WSClient4-8.1.1.zip/download dotNET2WSClient4-8.1.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Full-text search with search in sub-folder&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/dotNET2WSClient4-7.7.3.zip/download dotNET2WSClient4-7.7.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.5&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/dotNET4_WSClient-7.5.zip/download dotNET4_WSClient-7.5.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/dotNET-WSExamples-7.1.zip/download dotNET-WSExamples-7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/dotNET2WSClient-6.8.4.zip/download dotNET2WSClient-6.8.4.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/dotNET2WSClient-6.7.1.zip/download dotNET2WSClient-6.7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/dotNET-WSClient-6.6.2.zip/download dotNET-WSClient-6.6.2.zip]&lt;br /&gt;
| Visual Studio 2010 project&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/dotNET-WSClient-6.5.2.zip/download dotNET-WSClient-6.5.2.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/dotNET-webservice-client-6.4.zip/download dotNET-webservice-client-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/dotNET2WSClient-6.0.zip/download dotNET2WSClient-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.2.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.2/dotNET2WSClient-5.2.1.zip/download dotNET2WSClient-5.2.1.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.0/dotNET2WSClient-5.0.zip/download dotNET2WSClient-5.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Integration  ==&lt;br /&gt;
&lt;br /&gt;
The Web-Services of LogicalDOC are compatibles with PHP 8.2 &amp;lt;br&amp;gt;&lt;br /&gt;
The example package contains scripts for invoking the LogicalDOC API via SOAP and REST webservice.&amp;lt;br&amp;gt;&lt;br /&gt;
As always you can download it from SourceForge.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;PHP version&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.8.6&amp;lt;br&amp;gt; &lt;br /&gt;
|8.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.8/PHP-logicaldoc-webservices-886.zip/download PHP-logicaldoc-webservices-886]&lt;br /&gt;
| Changes: fixed document creation via SOAP with LD 8.3 and higher&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
|7.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/PHP-SOAP_webservice-873.zip/download PHP-SOAP_webservice-873.zip]&lt;br /&gt;
| Changes: Chunk upload for large files&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/PHP-SOAP_webservice-842.zip/download PHP-SOAP_webservice-842.zip]&lt;br /&gt;
| Changes: REST methods invocations&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/PHP-SOAP_webservice-8.2.1.zip/download PHP-SOAP_webservice-8.2.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/PHP-SOAP_webservice-8.1.1.zip/download PHP-SOAP_webservice-8.1.1.zip]&lt;br /&gt;
| Changes: updated example for recursive download&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.0/PHP-SOAP_webservice-8.0.zip/download PHP-SOAP_webservice-8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/PHP-SOAP_webservice-77.zip/download PHP-SOAP_webservice-77.zip]&lt;br /&gt;
| Changes: Removed field title in WSDocument&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/PHP-SOAP_webservice-7.5.zip/download PHP-SOAP_webservice-7.5.zip]&lt;br /&gt;
| Changes: Important changes in WSDocument fields (attributes), new REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 7.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/PHP-SOAP_webservice-7.4-R02.zip/download PHP-SOAP_webservice-7.4-R02.zip]&lt;br /&gt;
| Changes: Some changes in the WSDocument and WSFolder fields, new REST examples, new samples of Enterprise Search (parametric search)&lt;br /&gt;
|-&lt;br /&gt;
| 7.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.2/PHP-SOAP_webservice-7.2.zip/download PHP-SOAP_webservice-7.2.zip]&lt;br /&gt;
| Changes: Creating a folder from template with related metadata&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.0/PHP-SOAP_webservice-7.0.zip/download PHP-SOAP_webservice-7.0.zip]&lt;br /&gt;
| Changes: updated Search fullText examples, new Enterprise parametric search, Document download alias, Document download REST (big files), mini application in PHP, shows the latest document created/updated&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.4.zip/download PHP-SOAP_webservice-6.8.4.zip]&lt;br /&gt;
| Changes: search by parameters (EnterpriseSearch), full-text search on template fields, getTemplate by name (DocumentMeta)&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.3&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.3.zip/download PHP-SOAP_webservice-6.8.3.zip]&lt;br /&gt;
| Changes: new mini application in PHP, performs the research and presents a list of results for download&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/PHP-SOAP_webservice-6.8.1.zip/download PHP-SOAP_webservice-6.8.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/PHP-SOAP_webservice-6.7.1.zip/download PHP-SOAP_webservice-6.7.1.zip]&lt;br /&gt;
| Changes in: Search_parametric.php and Folder_workspaces.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/PHP-SOAP_webservice-6.6.2.zip/download PHP-SOAP_webservice-6.6.2.zip]&lt;br /&gt;
| New examples: Search_parametric.php and Document_createBinaryWithTemplate.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.2.zip/download PHP-SOAP_webservice-6.5.2.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.1.zip/download PHP-SOAP_webservice-6.5.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/PHP-SOAP_webservice-6.4.zip/download PHP-SOAP_webservice-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
| Of particular interest is the new example Folder_downloadRecursively.php that lets you perform full backup of the repository starting from a given folder&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/PHP-SOAP_webservice-6.0.zip/download PHP-SOAP_webservice-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1&amp;lt;br&amp;gt;&lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/PHP-SOAP_webservice-5.1.zip/download PHP-SOAP_webservice-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python  ==&lt;br /&gt;
A set of examples in Python to use the new REST APIs available from LogicalDOC since version 7.5&amp;lt;br/&amp;gt; &lt;br /&gt;
3.11.4 is the version of Python that we used to create and test the latest scripts.&amp;lt;br/&amp;gt; &lt;br /&gt;
These can be run from the command line on Windows: python &amp;lt;SCRIPT_FILENAME&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
Be aware that you might have to change the address and port of your LogicalDOC or the login credentials.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 9.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-9.1/Python-logicaldoc-webservices-911.zip/download Python-logicaldoc-webservices-911.zip]&lt;br /&gt;
| Added examples of invocation with API-KEY&amp;lt;br/&amp;gt;New example Copying document and resources from source LogicalDOC A to target LogicalDOC B&lt;br /&gt;
|-&lt;br /&gt;
| 8.9.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.9/Python-logicaldoc-webservices-891.zip/download Python-logicaldoc-webservices-891.zip]&lt;br /&gt;
| Added Reading Request SOAP and REST examples&amp;lt;br/&amp;gt;Added listUsers and StoreUser SOAP examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.4&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.7/Python-samples-8.7.4.zip/download Python-samples-8.7.4.zip]&lt;br /&gt;
| Added Enterprise Search REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/Python-samples-873.zip/download Python-samples-873.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/Python-samples-842.zip/download Python-samples-842.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/Python-samples-77.zip/download Python-samples-77.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/Python-samples-751.zip/download Python-samples-751.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://wiki.logicaldoc.com/rest/ http://wiki.logicaldoc.com/rest/]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Docker&amp;diff=3147</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Docker&amp;diff=3147"/>
		<updated>2024-08-29T09:05:39Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Running LogicalDOC Enterprise in a Docker container with connection to a MS SQL Server database */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Running LogicalDOC Enterprise in a Docker container with connection to a Oracle database ==&lt;br /&gt;
Running Oracle Database Server 12c R2 in a Docker container&amp;lt;br&amp;gt;&lt;br /&gt;
This is an official image released by Oracle of Oracle Database Server 12.2.0.1 Enterprise Edition running on Oracle Linux 7 &amp;lt;br&amp;gt;&lt;br /&gt;
In Docker Hub: [https://hub.docker.com/_/oracle-database-enterprise-edition Oracle Database Enterprise Edition] &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker login&lt;br /&gt;
docker pull store/oracle/database-enterprise:12.2.0.1-slim&lt;br /&gt;
docker run -it --name Oracle12-slim -p 1521:1521 store/oracle/database-enterprise:12.2.0.1-slim&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note as of 19/02/2019 (19 February 2019) when you connect using the proposed credentials you receive error ORA-28009, so you need to set a database static parameter on the Oracle container using SQL*Plus&amp;lt;br&amp;gt;&lt;br /&gt;
// How to solve Oracle exception&amp;lt;br&amp;gt;&lt;br /&gt;
//ORA-28009: connection as SYS should be as SYSDBA or SYSOPER&amp;lt;br&amp;gt;&lt;br /&gt;
[https://outofmymemory.wordpress.com/2013/09/24/ora-28009-connection-as-sys-should-be-as-sysdba-or-sysoper/ ORA-28009: connection as SYS should be as SYSDBA or SYSOPER]&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker exec -it Oracle12-slim bash -c &amp;quot;source /home/oracle/.bashrc; sqlplus /nolog&amp;quot;&lt;br /&gt;
&lt;br /&gt;
conn / as sysdba&lt;br /&gt;
SHOW PARAMETER O7_DICTIONARY_ACCESSIBILITY NAME TYPE VALUE;&lt;br /&gt;
ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY=TRUE scope=spfile;&lt;br /&gt;
shutdown immediate;&lt;br /&gt;
startup&lt;br /&gt;
conn sys/Oradoc_db1&lt;br /&gt;
SHOW PARAMETER O7_DICTIONARY_ACCESSIBILITY NAME TYPE VALUE;&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running LogicalDOC Enterprise (latest release) in a Docker container with connection to Oracle 12c R2 container with jdbc connection URL on SERVICE NAME&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull logicaldoc/logicaldoc&lt;br /&gt;
docker run --name=logicaldoc -p 8080:8080 --env LDOC_USERNO=YOUR_USERNO -e DB_ENGINE=oracle -e DB_USER=sys -e DB_PASSWORD=Oradoc_db1 -e DB_MANUALURL=true -e &amp;quot;DB_URL=jdbc:oracle:thin:@//Oracle12-slim:1521/ORCLCDB.localdomain&amp;quot; --link Oracle12-slim logicaldoc/logicaldoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Oracle XE 11g (unofficial) ==&lt;br /&gt;
Running Oracle XE 11g (Express edition) in a Docker container&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull wnameless/oracle-xe-11g&lt;br /&gt;
docker run --name=oracle-ld -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true wnameless/oracle-xe-11g&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Running LogicalDOC Enteprise (latest release) in a Docker container with connection to Oracle 11g container&lt;br /&gt;
(JDBC Connection using SID)&amp;lt;br&amp;gt;&lt;br /&gt;
See also [https://razorsql.com/articles/oracle_jdbc_connect.html How to Connect to Oracle via JDBC]&amp;lt;br&amp;gt;&lt;br /&gt;
In this example the SID is: xe  (DB_NAME)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull logicaldoc/logicaldoc&lt;br /&gt;
docker run --name=logicaldoc -p 8080:8080 --env LDOC_USERNO=YOUR_USERNO -e DB_ENGINE=oracle -e DB_HOST=oracle-ld -e DB_PORT=1521 -e DB_USER=system -e DB_PASSWORD=oracle -e DB_NAME=xe --link oracle-ld logicaldoc/logicaldoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running LogicalDOC Enteprise (latest release) in a Docker container connected to Oracle 11g with jdbc connection URL explicitly specified&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull logicaldoc/logicaldoc&lt;br /&gt;
docker run --name=logicaldoc -p 8080:8080 --env LDOC_USERNO=YOUR_USERNO -e DB_ENGINE=oracle -e DB_USER=system -e DB_PASSWORD=oracle -e DB_MANUALURL=true -e &amp;quot;DB_URL=jdbc:oracle:thin:@//oracle-ld:1521/xe&amp;quot; --link oracle-ld logicaldoc/logicaldoc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Running LogicalDOC Enterprise in a Docker container with connection to a MS SQL Server database ==&lt;br /&gt;
Running MS SQL Server 2017 in a Docker container&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull microsoft/mssql-server-linux:2017-latest&lt;br /&gt;
docker run --name=tomssl_sql -e &#039;ACCEPT_EULA=Y&#039; -e &#039;SA_PASSWORD=Str0ngPassword!&#039; -p 1401:1433 microsoft/mssql-server-linux:2017-latest&lt;br /&gt;
&lt;br /&gt;
docker exec -it tomssl_sql /opt/mssql-tools/bin/sqlcmd -S localhost -U sa&lt;br /&gt;
&lt;br /&gt;
CREATE DATABASE logicaldoc;&lt;br /&gt;
GO&lt;br /&gt;
&lt;br /&gt;
EXIT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Running LogicalDOC Enteprise (latest release) in a Docker container with connection to SQL Server container&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull logicaldoc/logicaldoc&lt;br /&gt;
docker run --name=ldocmssql -p 8080:8080 --env LDOC_USERNO=YOUR_USERNO -e DB_ENGINE=mssql -e DB_HOST=tomssl_sql -e DB_PORT=1433 -e DB_USER=sa -e &#039;DB_PASSWORD=Str0ngPassword!&#039; -e DB_NAME=logicaldoc -e DB_INSTANCE=MSSQLSERVER --link tomssl_sql logicaldoc/logicaldoc &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Another option is to manually specify the full connection URL&amp;lt;/br&amp;gt;&lt;br /&gt;
Example with LD 8.9.3 with JDK 21 (LTS)&amp;lt;/br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
docker pull logicaldoc/logicaldoc:8.9.3-jdk21&lt;br /&gt;
docker run --name=ldocmssql -p 8080:8080 --env LDOC_USERNO=YOUR_USERNO -e DB_ENGINE=mssql -e DB_USER=sa -e &#039;DB_PASSWORD=Str0ngPassword!&#039; -e DB_MANUALURL=true -e &#039;DB_URL=jdbc:sqlserver://tomssl_sql:1433;databaseName=logicaldoc;instanceName=MSSQLSERVER;encrypt=false&#039; --link tomssl_sql logicaldoc/logicaldoc:8.9.3-jdk21 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== License activation ==&lt;br /&gt;
{{Advice|In order to be able to enter into LogicalDOC you will have to register here to get an activation code: [https://www.logicaldoc.com/try https://www.logicaldoc.com/try]. You can then use the received code to activate your installation: [https://docs.logicaldoc.com/en/license-activation https://docs.logicaldoc.com/en/license-activation]}}&lt;br /&gt;
&lt;br /&gt;
== Tesseract OCR ==&lt;br /&gt;
Staring from LogicalDOC Enterprise 8.2 Docker image the OCR is available but with some limitation.&amp;lt;br&amp;gt;&lt;br /&gt;
In particular this translates into the fact that the reference dictionaries are limited to the English language.&amp;lt;br&amp;gt;&lt;br /&gt;
It is possible to install new dictionaries in various languages to improve the quality of OCR character recognition&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Connect to the container instance of LogicalDOC&lt;br /&gt;
docker exec -it &amp;lt;logicaldoc-container-name&amp;gt; bash&lt;br /&gt;
apt-get install tesseract-ocr-deu (installs german dictionary)&lt;br /&gt;
apt-get install tesseract-ocr-fra (installs french dictionary)&lt;br /&gt;
apt-get install tesseract-ocr-ita (installs italian dictionary)&lt;br /&gt;
apt-get install tesseract-ocr-spa (installs spanish dictionary)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See also:&amp;lt;br&amp;gt;&lt;br /&gt;
[https://askubuntu.com/questions/793634/how-do-i-install-a-new-language-pack-for-tesseract-on-16-04 How do I install a new language pack for Tesseract on 16.04]&amp;lt;br&amp;gt;&lt;br /&gt;
[https://www.howtoforge.com/tutorial/tesseract-ocr-installation-and-usage-on-ubuntu-16-04/ Tesseract OCR: Installation and Usage on Ubuntu 16.04]&lt;br /&gt;
&lt;br /&gt;
== Upgrade LogicalDOC Docker container ==&lt;br /&gt;
To update LogicalDOC running on a Docker container it is necessary to perform a particular procedure.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is to avoid compromising the configuration of the application and the documents it contains.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is the link [[Upgrade Docker container|Upgrade Docker container]]&lt;br /&gt;
&lt;br /&gt;
== More Information ==&lt;br /&gt;
For more information about LogicalDOC Docker image: [https://hub.docker.com/r/logicaldoc/logicaldoc https://hub.docker.com/r/logicaldoc/logicaldoc]&lt;br /&gt;
&lt;br /&gt;
[[Category: Docker]]&lt;br /&gt;
[[Category: Tesseract]]&lt;br /&gt;
[[Category: OCR]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3126</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3126"/>
		<updated>2024-06-12T07:49:31Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3125</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3125"/>
		<updated>2024-06-12T07:48:43Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; \&lt;br /&gt;
         -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3124</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3124"/>
		<updated>2024-06-12T07:46:10Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; \&lt;br /&gt;
        --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3123</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3123"/>
		<updated>2024-06-12T07:45:32Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; \&lt;br /&gt;
         -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3122</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3122"/>
		<updated>2024-06-12T07:44:12Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=325&amp;quot; --data-urlencode &lt;br /&gt;
&amp;quot;tag=fileExtension:docx&amp;quot; --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3121</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3121"/>
		<updated>2024-06-12T07:43:09Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Search */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
== Tags ==&lt;br /&gt;
Set the document tags of document with ID = 325&lt;br /&gt;
&lt;br /&gt;
$curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/tag/setDocumentTags&amp;quot; -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=325&amp;quot; --data-urlencode &amp;quot;tag=fileExtension:docx&amp;quot; --data-urlencode &amp;quot;tag=wopiLockString:1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3118</id>
		<title>Switch to Java17 on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3118"/>
		<updated>2024-05-07T09:35:06Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Linux ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java 11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java JDK 17 and not Java 18 or Java 19, because Java 17 is an LTS (Long Term Support) version and therefore support and updates will be available for a long time, also LD 8.9.1 has been extensively tested on this version.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is /LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java 17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
Hint for Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;$ apt install -y openjdk-17-jdk&amp;lt;/source&amp;gt;&lt;br /&gt;
Hint for CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz&lt;br /&gt;
$ tar xvf openjdk*&lt;br /&gt;
$ sudo mv jdk-17 /usr/java/&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/latest&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/default&lt;br /&gt;
$ sudo ln -sfn /usr/java/latest/bin/java /usr/bin/java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. With VI, or any other text editor, open the file &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/logicaldoc.sh.&lt;br /&gt;
Inside that file, locate the variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; and make sure it points to the Java17 installation folder:&amp;lt;br&amp;gt;&lt;br /&gt;
Probable path in Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr&amp;lt;/source&amp;gt;&lt;br /&gt;
Probable path in CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr/java/latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Iterate the point 2 for this list of additional files:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/update.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/patch.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/restart.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/reset-passwd.sh&lt;br /&gt;
&lt;br /&gt;
4. Restart LogicalDOC&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3117</id>
		<title>Switch to Java17 on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3117"/>
		<updated>2024-05-07T09:33:48Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Linux ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java 11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java 17 and not Java 18 or Java 19, because Java 17 is an LTS (Long Term Support) version and therefore support and updates will be available for a long time.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is /LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java 17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
Hint for Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;$ apt install -y openjdk-17-jdk&amp;lt;/source&amp;gt;&lt;br /&gt;
Hint for CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz&lt;br /&gt;
$ tar xvf openjdk*&lt;br /&gt;
$ sudo mv jdk-17 /usr/java/&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/latest&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/default&lt;br /&gt;
$ sudo ln -sfn /usr/java/latest/bin/java /usr/bin/java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. With VI, or any other text editor, open the file &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/logicaldoc.sh.&lt;br /&gt;
Inside that file, locate the variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; and make sure it points to the Java17 installation folder:&amp;lt;br&amp;gt;&lt;br /&gt;
Probable path in Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr&amp;lt;/source&amp;gt;&lt;br /&gt;
Probable path in CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr/java/latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Iterate the point 2 for this list of additional files:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/update.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/patch.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/restart.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/reset-passwd.sh&lt;br /&gt;
&lt;br /&gt;
4. Restart LogicalDOC&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Windows&amp;diff=3116</id>
		<title>Switch to Java17 on Windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Windows&amp;diff=3116"/>
		<updated>2024-05-07T09:30:35Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Windows ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java17 and not Java18 nor Java19, because Java17 is the latest LTS (Long Term Support) release available at the moment.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is C:\LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
2. Open a shell as Administator and go to &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;\tomcat\bin\&lt;br /&gt;
&lt;br /&gt;
3. Execute the command &#039;&#039;&#039;LogicalDOCw.exe //MS/LogicalDOC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4. This creates a tray icon with the LogicalDOC’s logo&lt;br /&gt;
&lt;br /&gt;
5. Right click on it and choose &#039;&#039;&#039;Configure...&#039;&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Ldoc_tray.png]]&lt;br /&gt;
&lt;br /&gt;
6. Now open the &amp;lt;b&amp;gt;Java&amp;lt;/b&amp;gt; tab&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Java-virtual-machine.png]]&lt;br /&gt;
&lt;br /&gt;
7. In the &#039;&#039;&#039;Java Virtual Machine&#039;&#039;&#039; put the full path of your jvm.dll (something like C:\Program Files\Java\jdk-11.0.4\bin\server)&lt;br /&gt;
&lt;br /&gt;
8. Click on &#039;&#039;&#039;Apply&#039;&#039;&#039; and then &#039;&#039;&#039;Ok&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
9. Restart the &#039;&#039;&#039;LogicalDOC&#039;&#039;&#039; service&lt;br /&gt;
&lt;br /&gt;
10. Open a shell as Administator and go to &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;\update-wd&lt;br /&gt;
&lt;br /&gt;
11. Execute the command &#039;&#039;&#039;update-wdw.exe //MS/LogicalDOC-Update&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
12. This creates another tray icon with the LogicalDOC’s logo&lt;br /&gt;
&lt;br /&gt;
13. Right click on it and choose &amp;lt;b&amp;gt;Configure...&amp;lt;/b&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:update_tray.png]]&lt;br /&gt;
&lt;br /&gt;
14. Now open the &amp;lt;b&amp;gt;Java&amp;lt;/b&amp;gt; tab&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:udpatewd-java17.png]]&lt;br /&gt;
&lt;br /&gt;
15. In the &#039;&#039;&#039;Java Virtual Machine&#039;&#039;&#039; put the full path of your jvm.dll (something like C:\Program Files\Java\jdk-11.0.4\bin\server)&lt;br /&gt;
&lt;br /&gt;
16. Click on &#039;&#039;&#039;Apply&#039;&#039;&#039; and then &#039;&#039;&#039;Ok&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
17. Define the a system variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; pointing to the Java11 installation path (something like C:\Program Files\Java\jdk-11.0.4)&lt;br /&gt;
&lt;br /&gt;
18. Restart the &#039;&#039;&#039;LogicalDOC Update&#039;&#039;&#039; service&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3115</id>
		<title>Switch to Java17 on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3115"/>
		<updated>2024-05-03T09:17:19Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Reconfigure LogicalDOC to use Java 17 on Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Linux ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java 11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java 17 and not Java 18 or Java 19, because Java 17 is an LTS (Long Term Support) version and because it is the minimum version required starting from LogicalDOC 8.9.1&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Alternatively you can also install another Java JDK (as long as LTS) such as Java JDK 21.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is /LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java 17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
Hint for Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;$ apt install -y openjdk-17-jdk&amp;lt;/source&amp;gt;&lt;br /&gt;
Hint for CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz&lt;br /&gt;
$ tar xvf openjdk*&lt;br /&gt;
$ sudo mv jdk-17 /usr/java/&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/latest&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/default&lt;br /&gt;
$ sudo ln -sfn /usr/java/latest/bin/java /usr/bin/java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. With VI, or any other text editor, open the file &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/logicaldoc.sh.&lt;br /&gt;
Inside that file, locate the variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; and make sure it points to the Java17 installation folder:&amp;lt;br&amp;gt;&lt;br /&gt;
Probable path in Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr&amp;lt;/source&amp;gt;&lt;br /&gt;
Probable path in CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr/java/latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Iterate the point 2 for this list of additional files:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/update.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/patch.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/restart.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/reset-passwd.sh&lt;br /&gt;
&lt;br /&gt;
4. Restart LogicalDOC&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3114</id>
		<title>Switch to Java17 on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3114"/>
		<updated>2024-05-03T09:09:01Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Linux ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java 11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java17 and not Java18 nor Java19, because Java 17 is the latest LTS (Long Term Support) release available at the moment.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is /LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java 17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
Hint for Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;$ apt install -y openjdk-17-jdk&amp;lt;/source&amp;gt;&lt;br /&gt;
Hint for CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz&lt;br /&gt;
$ tar xvf openjdk*&lt;br /&gt;
$ sudo mv jdk-17 /usr/java/&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/latest&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/default&lt;br /&gt;
$ sudo ln -sfn /usr/java/latest/bin/java /usr/bin/java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. With VI, or any other text editor, open the file &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/logicaldoc.sh.&lt;br /&gt;
Inside that file, locate the variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; and make sure it points to the Java17 installation folder:&amp;lt;br&amp;gt;&lt;br /&gt;
Probable path in Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr&amp;lt;/source&amp;gt;&lt;br /&gt;
Probable path in CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr/java/latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Iterate the point 2 for this list of additional files:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/update.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/patch.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/restart.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/reset-passwd.sh&lt;br /&gt;
&lt;br /&gt;
4. Restart LogicalDOC&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3113</id>
		<title>Switch to Java17 on Linux</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Switch_to_Java17_on_Linux&amp;diff=3113"/>
		<updated>2024-05-03T09:08:34Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Reconfigure LogicalDOC to use Java 17 on Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Reconfigure LogicalDOC to use Java 17 on Linux ===&lt;br /&gt;
&lt;br /&gt;
Starting from version 8.9.1 LogicalDOC does not work with Java11 anymore so you have to install Java17.&lt;br /&gt;
Please read first [https://docs.logicaldoc.com/en/installation how to install the right Java to use with LogicalDOC].&lt;br /&gt;
&lt;br /&gt;
It is important to install Java17 and not Java18 nor Java19, because Java17 is the latest LTS (Long Term Support) release available at the moment.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Given &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039; the installation path of LogicalDOC (by default it is /LogicalDOC), please proceed as follows:&lt;br /&gt;
&lt;br /&gt;
1. Install [https://docs.logicaldoc.com/en/installation Java17 from Oracle or OpenJDK17]&lt;br /&gt;
&lt;br /&gt;
Hint for Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;$ apt install -y openjdk-17-jdk&amp;lt;/source&amp;gt;&lt;br /&gt;
Hint for CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$ wget https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz&lt;br /&gt;
$ tar xvf openjdk*&lt;br /&gt;
$ sudo mv jdk-17 /usr/java/&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/latest&lt;br /&gt;
$ sudo ln -sfn /usr/java/jdk-17 /usr/java/default&lt;br /&gt;
$ sudo ln -sfn /usr/java/latest/bin/java /usr/bin/java&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. With VI, or any other text editor, open the file &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/logicaldoc.sh.&lt;br /&gt;
Inside that file, locate the variable &#039;&#039;&#039;JAVA_HOME&#039;&#039;&#039; and make sure it points to the Java17 installation folder:&amp;lt;br&amp;gt;&lt;br /&gt;
Probable path in Ubuntu:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr&amp;lt;/source&amp;gt;&lt;br /&gt;
Probable path in CentOS and RedHat:&lt;br /&gt;
&amp;lt;source&amp;gt;export JAVA_HOME=/usr/java/latest&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Iterate the point 2 for this list of additional files:&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/update.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/patch.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/restart.sh&lt;br /&gt;
* &#039;&#039;&#039;&amp;lt;LDOC_HOME&amp;gt;&#039;&#039;&#039;/bin/reset-passwd.sh&lt;br /&gt;
&lt;br /&gt;
4. Restart LogicalDOC&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3108</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3108"/>
		<updated>2024-03-27T16:17:40Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Create via Upload */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Create a new document, or a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited as it does not allow complete control of the metadata&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3107</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3107"/>
		<updated>2024-03-27T16:14:28Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
=== Create a Document ===&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited in metadata control&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3106</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3106"/>
		<updated>2024-03-27T16:12:02Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
&lt;br /&gt;
== Create a Document ==&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Create via Upload ===&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
This is a simpler way of creating documents, however it is more limited in metadata control&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
=== Update metadata ===&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
=== Delete ===&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
=== Convert a document to PDF ===&lt;br /&gt;
&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3105</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3105"/>
		<updated>2024-03-27T16:06:25Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert a document to PDF&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3104</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3104"/>
		<updated>2024-03-27T16:06:03Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert a document to PDF&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  $ curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3103</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3103"/>
		<updated>2024-03-27T16:05:11Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Document */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert a document to PDF&amp;lt;br/&amp;gt;&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3102</id>
		<title>RESTful Guide with curl</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=RESTful_Guide_with_curl&amp;diff=3102"/>
		<updated>2024-03-27T16:04:43Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: Added document conversion to PDF&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
{{Note|If you&#039;re interested in use LogicalDOC API we suggest to &#039;&#039;&#039;take a look at ours [[Bindings_And_Samples|Bindings and Samples]] and take advantage of already usable examples which connect to webservices API.}}&lt;br /&gt;
&lt;br /&gt;
LogicalDOC has a [http://docs.logicaldoc.com/en/web-services-api complete API exposed via REST]. This means you can call any of these API methods from any programming language, like Java, PHP or Python among others. This feature makes it possible to create a custom client, or integrate with third-party applications like a CRM or a CMS.&lt;br /&gt;
&lt;br /&gt;
{{Advice|Examples in this page refer to LogicalDOC 7.7; the [http://docs.logicaldoc.com/en/web-services-api REST API] is currently in development, so expect changes and additions.}}&lt;br /&gt;
&lt;br /&gt;
If you point your browser to http://localhost:8080/services, you can see the SOAP API at first place but at the bottom you will see a &#039;&#039;&#039;Available RESTful services&#039;&#039;&#039; section. These URLs are protected by BASIC authentication so you need to provide an user and password to access them.&lt;br /&gt;
&lt;br /&gt;
== Sample usage ==&lt;br /&gt;
To try these API methods you can use an HTTP Client library or any REST client which ease this process. Or simply you can use the &#039;&#039;&#039;curl&#039;&#039;&#039; command-line application. For example, you can list the children folders:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
[&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440640,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;alfa&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-15 15:49:40 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  },&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 3440643,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;beta&amp;quot;,&lt;br /&gt;
    &amp;quot;parentId&amp;quot;: 4,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;lastModified&amp;quot;: &amp;quot;2016-06-16 10:16:25 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;type&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;templateId&amp;quot;: null,&lt;br /&gt;
    &amp;quot;templateLocked&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;creation&amp;quot;: &amp;quot;2016-06-16 09:49:27 +0200&amp;quot;,&lt;br /&gt;
    &amp;quot;creator&amp;quot;: &amp;quot;Admin Admin&amp;quot;,&lt;br /&gt;
    &amp;quot;position&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;hidden&amp;quot;: 0,&lt;br /&gt;
    &amp;quot;foldRef&amp;quot;: null,&lt;br /&gt;
    &amp;quot;attributes&amp;quot;: [&lt;br /&gt;
      &lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case you can see the result in JSON format. &lt;br /&gt;
Some endpoints can also provide the results in XML format but you have to check them, if that is supported we can make a call sending the appropriate &#039;&#039;&#039;Accept&#039;&#039;&#039; header:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/xml&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/listChildren?folderId=4&lt;br /&gt;
&lt;br /&gt;
The result in XML is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;folders&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440640&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-15 15:49:40 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;alfa&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
  &amp;lt;folder&amp;gt;&lt;br /&gt;
    &amp;lt;creation&amp;gt;2016-06-16 09:49:27 +0200&amp;lt;/creation&amp;gt;&lt;br /&gt;
    &amp;lt;creator&amp;gt;Admin Admin&amp;lt;/creator&amp;gt;&lt;br /&gt;
    &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;&lt;br /&gt;
    &amp;lt;hidden&amp;gt;0&amp;lt;/hidden&amp;gt;&lt;br /&gt;
    &amp;lt;id&amp;gt;3440643&amp;lt;/id&amp;gt;&lt;br /&gt;
    &amp;lt;lastModified&amp;gt;2016-06-16 10:16:25 +0200&amp;lt;/lastModified&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;beta&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;parentId&amp;gt;4&amp;lt;/parentId&amp;gt;&lt;br /&gt;
    &amp;lt;position&amp;gt;1&amp;lt;/position&amp;gt;&lt;br /&gt;
    &amp;lt;templateLocked&amp;gt;0&amp;lt;/templateLocked&amp;gt;&lt;br /&gt;
    &amp;lt;type&amp;gt;0&amp;lt;/type&amp;gt;&lt;br /&gt;
  &amp;lt;/folder&amp;gt;&lt;br /&gt;
&amp;lt;/folders&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This is a Java client for the same call:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedReader;&lt;br /&gt;
import java.io.IOException;&lt;br /&gt;
import java.io.InputStreamReader;&lt;br /&gt;
import java.net.Authenticator;&lt;br /&gt;
import java.net.HttpURLConnection;&lt;br /&gt;
import java.net.MalformedURLException;&lt;br /&gt;
import java.net.PasswordAuthentication;&lt;br /&gt;
import java.net.URL;&lt;br /&gt;
&lt;br /&gt;
public class JavaRestClient {&lt;br /&gt;
    public static void main(String[] args) throws Exception {&lt;br /&gt;
        try {&lt;br /&gt;
            long folderID = 4L;&lt;br /&gt;
            URL url = new URL(&amp;quot;http://localhost:8080/services/rest/folder/listChildren?folderId=&amp;quot; + folderID);&lt;br /&gt;
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();&lt;br /&gt;
            conn.setRequestMethod(&amp;quot;GET&amp;quot;);&lt;br /&gt;
            conn.setRequestProperty(&amp;quot;Accept&amp;quot;, &amp;quot;application/json&amp;quot;);&lt;br /&gt;
            &lt;br /&gt;
            Authenticator.setDefault(new Authenticator() {&lt;br /&gt;
                protected PasswordAuthentication getPasswordAuthentication() {&lt;br /&gt;
                    return new PasswordAuthentication(&amp;quot;admin&amp;quot;, &amp;quot;admin&amp;quot;.toCharArray());&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
            &lt;br /&gt;
            if (conn.getResponseCode() == 200) {&lt;br /&gt;
                BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));&lt;br /&gt;
                System.out.println(&amp;quot;Output from Server .... \n&amp;quot;);&lt;br /&gt;
                String output;&lt;br /&gt;
                &lt;br /&gt;
                while ((output = br.readLine()) != null) {&lt;br /&gt;
                    System.out.println(output);&lt;br /&gt;
                }&lt;br /&gt;
            } else {&lt;br /&gt;
                System.err.println(&amp;quot;Failed : HTTP error code : &amp;quot; + conn.getResponseCode());&lt;br /&gt;
            }&lt;br /&gt;
            &lt;br /&gt;
            conn.disconnect();&lt;br /&gt;
        } catch (MalformedURLException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        } catch (IOException e) {&lt;br /&gt;
            e.printStackTrace();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Folder ==&lt;br /&gt;
Let&#039;s create a new folder:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: text/plain&amp;quot; -d &amp;quot;/Default/Curl/newfolder&amp;quot; \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createSimple&lt;br /&gt;
&lt;br /&gt;
Creates a path of folders starting from the folder with ID 4 (Default folder)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -H &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d parentId=4 -d path=How/to/POST/JSON/data/with/Curl \&lt;br /&gt;
    http://localhost:8080/services/rest/folder/createPath&lt;br /&gt;
&lt;br /&gt;
== Document ==&lt;br /&gt;
Now we are going to create a document. For this, we need to provide the document binary data:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=CHANGELOG.txt -F filedata=@CHANGELOG.txt \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
In this case the document will be added to the respository using the default language (english). Of course it is possible to specify the additional parameter &#039;language&#039; to tell the system that the document we are storing is in german (ISO 639-2 code)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; \&lt;br /&gt;
    -X POST -F folderId=4 -F filename=pub_arbeitsplatz_straße.pdf -F language=de -F filedata=@pub_arbeitsplatz_straße.pdf \&lt;br /&gt;
    http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Or also from a HTML form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;form method=&amp;quot;POST&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&lt;br /&gt;
          action=&amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot;&amp;gt;&lt;br /&gt;
      Select folder: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;folderId&amp;quot; value=&amp;quot;4&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select filename: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;filename&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      Select file: &amp;lt;input type=&amp;quot;file&amp;quot; name=&amp;quot;filedata&amp;quot; size=&amp;quot;45&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
      &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Upload&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now download it:&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456&lt;br /&gt;
&lt;br /&gt;
If the document is a binary file you can redirect the output to a file adding &#039;&amp;gt; filename&#039; to the end of the command&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    http://localhost:8080/services/rest/document/getContent?docId=456456456 &amp;gt; myFile.pdf&lt;br /&gt;
&lt;br /&gt;
Delete a specific version of a given document (since v7.6.4)&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin \&lt;br /&gt;
    -G -d docId=1803 -d version=1.3 -X DELETE http://localhost:8080/services/rest/document/deleteVersion&lt;br /&gt;
&lt;br /&gt;
Update the document metadata. Specifically, we can see how to update an extended attribute field of type date (type = 3) using the property dateValue&lt;br /&gt;
&lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X PUT \&lt;br /&gt;
    -d &amp;quot;{ \&amp;quot;id\&amp;quot;: 47, \&amp;quot;folderId\&amp;quot;: 4, \&amp;quot;fileName\&amp;quot;:\&amp;quot;Egzai_u002.doc\&amp;quot;, \&amp;quot;templateId\&amp;quot;:92241920, \&amp;quot;attributes\&amp;quot;:[{\&amp;quot;name\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;stringValue\&amp;quot;:\&amp;quot;ack\&amp;quot;,\&amp;quot;type\&amp;quot;:0},{\&amp;quot;name\&amp;quot;:\&amp;quot;Tar\&amp;quot;,\&amp;quot;dateValue\&amp;quot;:\&amp;quot;2017-03-18 19:10:00 +0100\&amp;quot;,\&amp;quot;type\&amp;quot;:3}] }&amp;quot; \ &lt;br /&gt;
    http://localhost:8080/services/rest/document/update&lt;br /&gt;
&lt;br /&gt;
Creates a document with the create method on Windows 10&amp;lt;br/&amp;gt;&lt;br /&gt;
Windows 10, curl 7.55.1 (Windows) libcurl/7.55.1 WinSSL &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/create&amp;quot; -H &amp;quot;accept: application/json&amp;quot; -H &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;document={ \&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;fileName\&amp;quot;:\&amp;quot;ScreenHunter949.png\&amp;quot;,\&amp;quot;folderId\&amp;quot;:4 };type=application/json&amp;quot; -F &amp;quot;content=@C:\Users\shatz\Desktop\ScreenHunter949.png;type=application/octet-stream&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Convert a document to PDF&lt;br /&gt;
Note: This will only perform the conversion, if completed successfully it returns HTTP code 204 and empty content&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -X PUT &amp;quot;http://localhost:8080/services/rest/document/createPdf?docId=125&amp;quot; -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the converted .PDF file (latest version of the document)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -v -X GET &amp;quot;http://localhost:8080/services/rest/document/getResource?docId=125&amp;amp;suffix=conversion.pdf&amp;quot; -H  &amp;quot;accept: application/octet-stream&amp;quot; -H  &amp;quot;Authorization: Basic YWRtaW46YWRtaW4=&amp;quot; --output 125-conversion.pdf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Versioning ===&lt;br /&gt;
Checkout an existing document&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -k -u admin:admin -X POST https://[url]/services/rest/document/checkout \&lt;br /&gt;
    -H  &amp;quot;accept: application/json&amp;quot; -H  &amp;quot;Content-Type: application/x-www-form-urlencoded&amp;quot; -d &amp;quot;docId=2686&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Checkin a new version of document (the document must be in checked-out state) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
  $ curl -v -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/checkin&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;accept: */*&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;comment=&amp;quot; -F &amp;quot;release=false&amp;quot; -F &amp;quot;filename=Checkmarx.txt&amp;quot; -F &amp;quot;filedata=@Checkmarx.txt;type=text/plain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upload: Creates a new version of an existing document (in one step) [Windows 11]&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -X POST &amp;quot;http://localhost:8080/services/rest/document/upload&amp;quot; \&lt;br /&gt;
    -H  &amp;quot;Accept: application/json&amp;quot; -H  &amp;quot;Content-Type: multipart/form-data&amp;quot; -F &amp;quot;docId=721&amp;quot; -F &amp;quot;folderId=&amp;quot; -F &amp;quot;release=false&amp;quot; \&lt;br /&gt;
    -F &amp;quot;filename=logicaldoc_community - Checkmarx AST.pdf&amp;quot; -F &amp;quot;language=en&amp;quot; -F &amp;quot;filedata=@logicaldoc_community - Checkmarx AST.pdf;type=application/pdf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Upload: updates the content of an existing document generating a new version &lt;br /&gt;
  $ curl -v -u admin:admin -H &amp;quot;Accept: application/json&amp;quot; -X POST -F docId=118 -F filename=google.png -F filedata=@C:\tmp\google.png http://localhost:8080/services/rest/document/upload&lt;br /&gt;
&lt;br /&gt;
== Search ==&lt;br /&gt;
Standard Full-text search on content, title and tags using english as language of the query (expressionLanguage) and on english documents (language):&lt;br /&gt;
&lt;br /&gt;
  $ curl -u admin:admin -H &amp;quot;Content-Type: application/json&amp;quot; -H &amp;quot;Accept: application/json&amp;quot; -X POST \&lt;br /&gt;
    -d &amp;quot;{\&amp;quot;maxHits\&amp;quot;:50,\&amp;quot;expression\&amp;quot;:\&amp;quot;document management system\&amp;quot;,\&amp;quot;expressionLanguage\&amp;quot;:\&amp;quot;en\&amp;quot;,\&amp;quot;language\&amp;quot;:\&amp;quot;en\&amp;quot;, \&amp;quot;dateFrom\&amp;quot;: \&amp;quot;2023-01-01\&amp;quot;}&amp;quot; &lt;br /&gt;
    http://localhost:8080/services/rest/search/find&lt;br /&gt;
&lt;br /&gt;
Date fields you can use: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;dateFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;dateTo&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationFrom&amp;quot;: &amp;quot;string&amp;quot;, &lt;br /&gt;
&amp;quot;creationTo&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dates must be expressed in ISO format: yyyy-mm-dd or yyyy-MM-dd HH:mm:ss (24 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
More info at:&lt;br /&gt;
&lt;br /&gt;
* [http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/ curl tutorial with examples of usage]&lt;br /&gt;
* [http://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.6.4 LogicalDOC REST API reference v7.6.4]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=7.7.6 LogicalDOC REST API reference v7.7.6]&lt;br /&gt;
* [https://docs.logicaldoc.com/resources/wsdoc/rest/index.html?version=8.1.0 LogicalDOC REST API reference v8.1]&lt;br /&gt;
* [https://app.swaggerhub.com/apis/swatzniak/logicaldoc_rest_api/8.8.1 LogicalDOC REST API | 8.8.1 | SwaggerHub]&lt;br /&gt;
* [[Bindings_And_Samples|Webservices - Binding and Examples]]&lt;br /&gt;
* [https://docs.logicaldoc.com/en/web-services-api LogicalDOC Web Services API]&lt;br /&gt;
&lt;br /&gt;
[[Category: RESTful Guide]]&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=3101</id>
		<title>Bindings And Samples</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=3101"/>
		<updated>2024-03-22T08:42:41Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== JAVA Examples  ==&lt;br /&gt;
&lt;br /&gt;
On SourceForge we have released an example project that Tests the WS features of LD and simultaneously shows the WS invocations with JAVA&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 407px; height: 117px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.3.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/logicaldoc-webservicesamples-8.3.4.zip/download logicaldoc-webservicesamples-8.3.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.3/Java-webserviceTests-8.3.zip/download Java-webserviceTests-8.3.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.0/Java-webserviceTests-8.0.0.zip/download Java-webserviceTests-8.0.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-7.6/webserviceTests-Java.zip/download webserviceTests-Java.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/samples-7.5/Java-webserviceTests-7.5.2.zip/download Java-webserviceTests-7.5.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.4.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/Java-webserviceTests-7.4.zip/download Java-webserviceTests-7.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.1.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/Java-webserviceTests-7.1.0.zip/download Java-webserviceTests-7.1.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/Java-webserviceTests-6.8.0.zip/download Java-WebServicesTests-6.8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/Java-webserviceTests-6.7.1.zip/download Java-WebServicesTests-6.7.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/Java-WebServicesTests-6.6.2.zip/download Java-WebServicesTests-6.6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/Java-WebServicesTests-6.5.1.zip/download Java-WebServicesTests-6.5.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.4 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/Java-WebServicesTests-6.4.zip/download Java-WebServicesTests-6.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.2 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.2/Java-WebServicesTests-6.2.zip/download Java-WebServicesTests-6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/Java-webserviceTests-6.0.zip/download Java-WebServicesTests-6.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/Java-webserviceTests-5.1.zip/download Java-WebServicesTests-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== .NET Integration  ==&lt;br /&gt;
&lt;br /&gt;
This is a sample Visual Studio 2008/2010 project created to illustrate some C# .NET 4.0/2.0 invocations of the LogicalDOC web-services&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 508px; height: 102px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD&amp;amp;nbsp;version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample package&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Visual Studio&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/dotNET2WSClient4-8.7.1.zip/download dotNET2WSClient4-8.7.1.zip]&lt;br /&gt;
| VS 2017&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/dotNET2WSClient4-8.3.zip/download dotNET2WSClient4-8.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Includes an example of creating AttributeSets and Templates&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/dotNET2WSClient4-8.2.1.zip/download dotNET2WSClient4-8.2.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Complete example of full-text search with custom attributes&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/dotNET2WSClient4-8.1.1.zip/download dotNET2WSClient4-8.1.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Full-text search with search in sub-folder&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/dotNET2WSClient4-7.7.3.zip/download dotNET2WSClient4-7.7.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.5&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/dotNET4_WSClient-7.5.zip/download dotNET4_WSClient-7.5.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/dotNET-WSExamples-7.1.zip/download dotNET-WSExamples-7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/dotNET2WSClient-6.8.4.zip/download dotNET2WSClient-6.8.4.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/dotNET2WSClient-6.7.1.zip/download dotNET2WSClient-6.7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/dotNET-WSClient-6.6.2.zip/download dotNET-WSClient-6.6.2.zip]&lt;br /&gt;
| Visual Studio 2010 project&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/dotNET-WSClient-6.5.2.zip/download dotNET-WSClient-6.5.2.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/dotNET-webservice-client-6.4.zip/download dotNET-webservice-client-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/dotNET2WSClient-6.0.zip/download dotNET2WSClient-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.2.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.2/dotNET2WSClient-5.2.1.zip/download dotNET2WSClient-5.2.1.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.0/dotNET2WSClient-5.0.zip/download dotNET2WSClient-5.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Integration  ==&lt;br /&gt;
&lt;br /&gt;
The Web-Services of LogicalDOC are compatibles with PHP 8.2 &amp;lt;br&amp;gt;&lt;br /&gt;
The example package contains scripts for invoking the LogicalDOC API via SOAP and REST webservice.&amp;lt;br&amp;gt;&lt;br /&gt;
As always you can download it from SourceForge.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;PHP version&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.8.6&amp;lt;br&amp;gt; &lt;br /&gt;
|8.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.8/PHP-logicaldoc-webservices-886.zip/download PHP-logicaldoc-webservices-886]&lt;br /&gt;
| Changes: fixed document creation via SOAP with LD 8.3 and higher&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
|7.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/PHP-SOAP_webservice-873.zip/download PHP-SOAP_webservice-873.zip]&lt;br /&gt;
| Changes: Chunk upload for large files&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/PHP-SOAP_webservice-842.zip/download PHP-SOAP_webservice-842.zip]&lt;br /&gt;
| Changes: REST methods invocations&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/PHP-SOAP_webservice-8.2.1.zip/download PHP-SOAP_webservice-8.2.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/PHP-SOAP_webservice-8.1.1.zip/download PHP-SOAP_webservice-8.1.1.zip]&lt;br /&gt;
| Changes: updated example for recursive download&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.0/PHP-SOAP_webservice-8.0.zip/download PHP-SOAP_webservice-8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/PHP-SOAP_webservice-77.zip/download PHP-SOAP_webservice-77.zip]&lt;br /&gt;
| Changes: Removed field title in WSDocument&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/PHP-SOAP_webservice-7.5.zip/download PHP-SOAP_webservice-7.5.zip]&lt;br /&gt;
| Changes: Important changes in WSDocument fields (attributes), new REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 7.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/PHP-SOAP_webservice-7.4-R02.zip/download PHP-SOAP_webservice-7.4-R02.zip]&lt;br /&gt;
| Changes: Some changes in the WSDocument and WSFolder fields, new REST examples, new samples of Enterprise Search (parametric search)&lt;br /&gt;
|-&lt;br /&gt;
| 7.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.2/PHP-SOAP_webservice-7.2.zip/download PHP-SOAP_webservice-7.2.zip]&lt;br /&gt;
| Changes: Creating a folder from template with related metadata&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.0/PHP-SOAP_webservice-7.0.zip/download PHP-SOAP_webservice-7.0.zip]&lt;br /&gt;
| Changes: updated Search fullText examples, new Enterprise parametric search, Document download alias, Document download REST (big files), mini application in PHP, shows the latest document created/updated&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.4.zip/download PHP-SOAP_webservice-6.8.4.zip]&lt;br /&gt;
| Changes: search by parameters (EnterpriseSearch), full-text search on template fields, getTemplate by name (DocumentMeta)&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.3&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.3.zip/download PHP-SOAP_webservice-6.8.3.zip]&lt;br /&gt;
| Changes: new mini application in PHP, performs the research and presents a list of results for download&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/PHP-SOAP_webservice-6.8.1.zip/download PHP-SOAP_webservice-6.8.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/PHP-SOAP_webservice-6.7.1.zip/download PHP-SOAP_webservice-6.7.1.zip]&lt;br /&gt;
| Changes in: Search_parametric.php and Folder_workspaces.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/PHP-SOAP_webservice-6.6.2.zip/download PHP-SOAP_webservice-6.6.2.zip]&lt;br /&gt;
| New examples: Search_parametric.php and Document_createBinaryWithTemplate.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.2.zip/download PHP-SOAP_webservice-6.5.2.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.1.zip/download PHP-SOAP_webservice-6.5.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/PHP-SOAP_webservice-6.4.zip/download PHP-SOAP_webservice-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
| Of particular interest is the new example Folder_downloadRecursively.php that lets you perform full backup of the repository starting from a given folder&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/PHP-SOAP_webservice-6.0.zip/download PHP-SOAP_webservice-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1&amp;lt;br&amp;gt;&lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/PHP-SOAP_webservice-5.1.zip/download PHP-SOAP_webservice-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python  ==&lt;br /&gt;
A set of examples in Python to use the new REST APIs available from LogicalDOC since version 7.5&amp;lt;br/&amp;gt; &lt;br /&gt;
3.11.4 is the version of Python that we used to create and test the latest scripts.&amp;lt;br/&amp;gt; &lt;br /&gt;
These can be run from the command line on Windows: python &amp;lt;SCRIPT_FILENAME&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
Be aware that you might have to change the address and port of your LogicalDOC or the login credentials.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.9.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.9/Python-logicaldoc-webservices-891.zip/download Python-logicaldoc-webservices-891.zip]&lt;br /&gt;
| Added Reading Request SOAP and REST examples&amp;lt;br/&amp;gt;Added listUsers and StoreUser SOAP examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.4&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.7/Python-samples-8.7.4.zip/download Python-samples-8.7.4.zip]&lt;br /&gt;
| Added Enterprise Search REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/Python-samples-873.zip/download Python-samples-873.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/Python-samples-842.zip/download Python-samples-842.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/Python-samples-77.zip/download Python-samples-77.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/Python-samples-751.zip/download Python-samples-751.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://wiki.logicaldoc.com/rest/ http://wiki.logicaldoc.com/rest/]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=3100</id>
		<title>Bindings And Samples</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=Bindings_And_Samples&amp;diff=3100"/>
		<updated>2024-03-22T08:40:41Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Python */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== JAVA Examples  ==&lt;br /&gt;
&lt;br /&gt;
On SourceForge we have released an example project that Tests the WS features of LD and simultaneously shows the WS invocations with JAVA&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 407px; height: 117px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.3.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/logicaldoc-webservicesamples-8.3.4.zip/download logicaldoc-webservicesamples-8.3.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.3/Java-webserviceTests-8.3.zip/download Java-webserviceTests-8.3.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.0.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.0/Java-webserviceTests-8.0.0.zip/download Java-webserviceTests-8.0.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.6.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-7.6/webserviceTests-Java.zip/download webserviceTests-Java.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/samples-7.5/Java-webserviceTests-7.5.2.zip/download Java-webserviceTests-7.5.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.4.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/Java-webserviceTests-7.4.zip/download Java-webserviceTests-7.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.1.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/Java-webserviceTests-7.1.0.zip/download Java-webserviceTests-7.1.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/Java-webserviceTests-6.8.0.zip/download Java-WebServicesTests-6.8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/Java-webserviceTests-6.7.1.zip/download Java-WebServicesTests-6.7.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/Java-WebServicesTests-6.6.2.zip/download Java-WebServicesTests-6.6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/Java-WebServicesTests-6.5.1.zip/download Java-WebServicesTests-6.5.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.4 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/Java-WebServicesTests-6.4.zip/download Java-WebServicesTests-6.4.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.2 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.2/Java-WebServicesTests-6.2.zip/download Java-WebServicesTests-6.2.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 6.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/Java-webserviceTests-6.0.zip/download Java-WebServicesTests-6.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/Java-webserviceTests-5.1.zip/download Java-WebServicesTests-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== .NET Integration  ==&lt;br /&gt;
&lt;br /&gt;
This is a sample Visual Studio 2008/2010 project created to illustrate some C# .NET 4.0/2.0 invocations of the LogicalDOC web-services&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 508px; height: 102px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD&amp;amp;nbsp;version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Sample package&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Visual Studio&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/dotNET2WSClient4-8.7.1.zip/download dotNET2WSClient4-8.7.1.zip]&lt;br /&gt;
| VS 2017&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 8.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.3/dotNET2WSClient4-8.3.zip/download dotNET2WSClient4-8.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Includes an example of creating AttributeSets and Templates&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/dotNET2WSClient4-8.2.1.zip/download dotNET2WSClient4-8.2.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Complete example of full-text search with custom attributes&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/dotNET2WSClient4-8.1.1.zip/download dotNET2WSClient4-8.1.1.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| Full-text search with search in sub-folder&lt;br /&gt;
|-&lt;br /&gt;
| 7.7.3&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/dotNET2WSClient4-7.7.3.zip/download dotNET2WSClient4-7.7.3.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.5&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/dotNET4_WSClient-7.5.zip/download dotNET4_WSClient-7.5.zip]&lt;br /&gt;
| VS 2013&lt;br /&gt;
| (.NET 4.0) Upload document REST example&lt;br /&gt;
|-&lt;br /&gt;
| 7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.1/dotNET-WSExamples-7.1.zip/download dotNET-WSExamples-7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/dotNET2WSClient-6.8.4.zip/download dotNET2WSClient-6.8.4.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/dotNET2WSClient-6.7.1.zip/download dotNET2WSClient-6.7.1.zip]&lt;br /&gt;
| VS 2010&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/dotNET-WSClient-6.6.2.zip/download dotNET-WSClient-6.6.2.zip]&lt;br /&gt;
| Visual Studio 2010 project&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/dotNET-WSClient-6.5.2.zip/download dotNET-WSClient-6.5.2.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.4&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/dotNET-webservice-client-6.4.zip/download dotNET-webservice-client-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/dotNET2WSClient-6.0.zip/download dotNET2WSClient-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.2.1&lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.2/dotNET2WSClient-5.2.1.zip/download dotNET2WSClient-5.2.1.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.0/dotNET2WSClient-5.0.zip/download dotNET2WSClient-5.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== PHP Integration  ==&lt;br /&gt;
&lt;br /&gt;
The Web-Services of LogicalDOC are compatibles with PHP 8.2 &amp;lt;br&amp;gt;&lt;br /&gt;
The example package contains scripts for invoking the LogicalDOC API via SOAP and REST webservice.&amp;lt;br&amp;gt;&lt;br /&gt;
As always you can download it from SourceForge.&amp;lt;br&amp;gt; &lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LogicalDOC version&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;&#039;PHP version&#039;&#039;&#039;&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.8.6&amp;lt;br&amp;gt; &lt;br /&gt;
|8.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.8/PHP-logicaldoc-webservices-886.zip/download PHP-logicaldoc-webservices-886]&lt;br /&gt;
| Changes: fixed document creation via SOAP with LD 8.3 and higher&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
|7.4&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/PHP-SOAP_webservice-873.zip/download PHP-SOAP_webservice-873.zip]&lt;br /&gt;
| Changes: Chunk upload for large files&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/PHP-SOAP_webservice-842.zip/download PHP-SOAP_webservice-842.zip]&lt;br /&gt;
| Changes: REST methods invocations&lt;br /&gt;
|-&lt;br /&gt;
| 8.2.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.2&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.2/PHP-SOAP_webservice-8.2.1.zip/download PHP-SOAP_webservice-8.2.1.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 8.1.1&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.1/PHP-SOAP_webservice-8.1.1.zip/download PHP-SOAP_webservice-8.1.1.zip]&lt;br /&gt;
| Changes: updated example for recursive download&lt;br /&gt;
|-&lt;br /&gt;
| 8.0&amp;lt;br&amp;gt; &lt;br /&gt;
|7.0&lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.0/PHP-SOAP_webservice-8.0.zip/download PHP-SOAP_webservice-8.0.zip]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/PHP-SOAP_webservice-77.zip/download PHP-SOAP_webservice-77.zip]&lt;br /&gt;
| Changes: Removed field title in WSDocument&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/PHP-SOAP_webservice-7.5.zip/download PHP-SOAP_webservice-7.5.zip]&lt;br /&gt;
| Changes: Important changes in WSDocument fields (attributes), new REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 7.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.4/PHP-SOAP_webservice-7.4-R02.zip/download PHP-SOAP_webservice-7.4-R02.zip]&lt;br /&gt;
| Changes: Some changes in the WSDocument and WSFolder fields, new REST examples, new samples of Enterprise Search (parametric search)&lt;br /&gt;
|-&lt;br /&gt;
| 7.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.2/PHP-SOAP_webservice-7.2.zip/download PHP-SOAP_webservice-7.2.zip]&lt;br /&gt;
| Changes: Creating a folder from template with related metadata&lt;br /&gt;
|-&lt;br /&gt;
| 7.0.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.0/PHP-SOAP_webservice-7.0.zip/download PHP-SOAP_webservice-7.0.zip]&lt;br /&gt;
| Changes: updated Search fullText examples, new Enterprise parametric search, Document download alias, Document download REST (big files), mini application in PHP, shows the latest document created/updated&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.4.zip/download PHP-SOAP_webservice-6.8.4.zip]&lt;br /&gt;
| Changes: search by parameters (EnterpriseSearch), full-text search on template fields, getTemplate by name (DocumentMeta)&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.3&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%206.8/PHP-SOAP_webservice-6.8.3.zip/download PHP-SOAP_webservice-6.8.3.zip]&lt;br /&gt;
| Changes: new mini application in PHP, performs the research and presents a list of results for download&lt;br /&gt;
|-&lt;br /&gt;
| 6.8.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.8/PHP-SOAP_webservice-6.8.1.zip/download PHP-SOAP_webservice-6.8.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.7.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.7/PHP-SOAP_webservice-6.7.1.zip/download PHP-SOAP_webservice-6.7.1.zip]&lt;br /&gt;
| Changes in: Search_parametric.php and Folder_workspaces.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.6.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.6/PHP-SOAP_webservice-6.6.2.zip/download PHP-SOAP_webservice-6.6.2.zip]&lt;br /&gt;
| New examples: Search_parametric.php and Document_createBinaryWithTemplate.php&lt;br /&gt;
|-&lt;br /&gt;
| 6.5.2&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.2.zip/download PHP-SOAP_webservice-6.5.2.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.5/PHP-SOAP_webservice-6.5.1.zip/download PHP-SOAP_webservice-6.5.1.zip]&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 6.4&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.4/PHP-SOAP_webservice-6.4.zip/download PHP-SOAP_webservice-6.4.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
| Of particular interest is the new example Folder_downloadRecursively.php that lets you perform full backup of the repository starting from a given folder&lt;br /&gt;
|-&lt;br /&gt;
| 6.0&amp;lt;br&amp;gt; &lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-6.0/PHP-SOAP_webservice-6.0.zip/download PHP-SOAP_webservice-6.0.zip]&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 5.0/5.1&amp;lt;br&amp;gt;&lt;br /&gt;
|5.4.43 &lt;br /&gt;
| [http://sourceforge.net/projects/logicaldoc/files/samples/samples-5.1/PHP-SOAP_webservice-5.1.zip/download PHP-SOAP_webservice-5.1.zip]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Python  ==&lt;br /&gt;
A set of examples in Python to use the new REST APIs available from LogicalDOC since version 7.5&amp;lt;br/&amp;gt; &lt;br /&gt;
3.11.4 is the version of Python that we used to create and test the latest scripts.&amp;lt;br/&amp;gt; &lt;br /&gt;
These can be run from the command line on Windows: python &amp;lt;SCRIPT_FILENAME&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
Be aware that you might have to change the address and port of your LogicalDOC or the login credentials.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
{| cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;width: 100%; height: 79px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;LD version&#039;&#039;&#039; &lt;br /&gt;
| align=&amp;quot;center&amp;quot; | &#039;&#039;&#039;Download Url&#039;&#039;&#039;&lt;br /&gt;
| &#039;&#039;&#039;Notes&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 8.9.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.9/Python-logicaldoc-webservices-891.zip/download Python-logicaldoc-webservices-891.zip]&lt;br /&gt;
| Added Reading Request SOAP and REST examples&lt;br /&gt;
| Added listUsers and StoreUser SOAP examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.4&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/samples/examples-8.7/Python-samples-8.7.4.zip/download Python-samples-8.7.4.zip]&lt;br /&gt;
| Added Enterprise Search REST examples&lt;br /&gt;
|-&lt;br /&gt;
| 8.7.3&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.7/Python-samples-873.zip/download Python-samples-873.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 8.4.2&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%208.4/Python-samples-842.zip/download Python-samples-842.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.7&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.7/Python-samples-77.zip/download Python-samples-77.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://docs.logicaldoc.com/en/web-services-api http://docs.logicaldoc.com/en/web-services-api]&lt;br /&gt;
|-&lt;br /&gt;
| 7.5/7.5.1&amp;lt;br&amp;gt; &lt;br /&gt;
| [https://sourceforge.net/projects/logicaldoc/files/distribution/LogicalDOC%20CE%207.5/Python-samples-751.zip/download Python-samples-751.zip]&lt;br /&gt;
| Interactive Documentation about the RESTful APIs is available at [http://wiki.logicaldoc.com/rest/ http://wiki.logicaldoc.com/rest/]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
	<entry>
		<id>http://wiki.logicaldoc.com/wiki/index.php?title=SSL_Configuration_using_Certificate&amp;diff=3063</id>
		<title>SSL Configuration using Certificate</title>
		<link rel="alternate" type="text/html" href="http://wiki.logicaldoc.com/wiki/index.php?title=SSL_Configuration_using_Certificate&amp;diff=3063"/>
		<updated>2024-02-27T15:14:29Z</updated>

		<summary type="html">&lt;p&gt;Blucecio: /* Install PFX certificates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOCright}} __TOC__&lt;br /&gt;
&lt;br /&gt;
LogicalDOC embeds the Tomcat application server and it can be configured to support the encrypted protocol HTTPS. This is useful when you want to expose the program on the Internet.&lt;br /&gt;
&lt;br /&gt;
{{Advice|&amp;lt;b&amp;gt;&amp;lt;u&amp;gt;Please be aware that this procedure is not coverded by the standard support contract&amp;lt;/u&amp;gt;.&amp;lt;/b&amp;gt; &amp;lt;br/&amp;gt;In case you want this matter to be handled professionally, please write to sales@logicaldoc.com for a quote.}}&lt;br /&gt;
&lt;br /&gt;
Basically you only have to follows the steps described in the Apache how-to at [https://tomcat.apache.org/tomcat-9.0-doc/ssl-howto.html SSL Configuration HOW-TO]&lt;br /&gt;
What follows is a re-visioned extract from that how-to&lt;br /&gt;
&lt;br /&gt;
== Preparing the certificates ==&lt;br /&gt;
Note: skip this step if you already have your own SSL certificate&lt;br /&gt;
&lt;br /&gt;
To install and configure SSL support on Tomcat, you need the following things:&lt;br /&gt;
* The file of your server certificate (the format must be PEM-encoded)&lt;br /&gt;
* The file containing the certificate chain associated with the server certificate (the format must be PEM-encoded)&lt;br /&gt;
* The file that contains the server private key (the format must be PEM-encoded)&lt;br /&gt;
&lt;br /&gt;
You get those 3 files as a result of the certificate issuing procedure.&lt;br /&gt;
&lt;br /&gt;
Most of the times you server&#039;s certificate and the chain file are in .crt, .cer or .der format.&lt;br /&gt;
In this case please convert them  openssl:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -in cert.crt -out cert.pem&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -in cert.cer -out cert.pem&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;openssl x509 -in cert.der -out cert.pem&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the same way, probably your secret key is in .txt format, so please convert it into .pem using openssl:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;openssl rsa -in privkey.txt -out privkey.pem&amp;lt;/code&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We suggest to put your .pem files in &amp;lt;LDOC_HOME&amp;gt;/conf and in any case outside the tomcat folder.&lt;br /&gt;
&lt;br /&gt;
==Edit the Tomcat configuration file==    &lt;br /&gt;
The final step is to configure your secure socket in the &amp;lt;LDOC_HOME&amp;gt;/tomcat/conf/server.xml file, where &amp;lt;LDOC_HOME&amp;gt; represents the base directory for the LogicalDOC installation. An example &amp;lt;Connector&amp;gt; element for an SSL connector looks something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Connector protocol=&amp;quot;org.apache.coyote.http11.Http11NioProtocol&amp;quot;&lt;br /&gt;
               port=&amp;quot;8443&amp;quot; maxThreads=&amp;quot;200&amp;quot;&lt;br /&gt;
               URIEncoding=&amp;quot;UTF-8&amp;quot; server=&amp;quot;Undisclosed/8.41&amp;quot;&lt;br /&gt;
               scheme=&amp;quot;https&amp;quot; secure=&amp;quot;true&amp;quot; SSLEnabled=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
               &amp;lt;SSLHostConfig&amp;gt;&lt;br /&gt;
                 &amp;lt;Certificate certificateFile=&amp;quot;${catalina.home}/../conf/&amp;lt;b&amp;gt;cert.pem&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
                              certificateKeyFile=&amp;quot;${catalina.home}/../conf/&amp;lt;b&amp;gt;privkey.pem&amp;lt;/b&amp;gt;&amp;quot;&lt;br /&gt;
                              certificateChainFile=&amp;quot;${catalina.home}/../conf/&amp;lt;b&amp;gt;chain.pem&amp;lt;/b&amp;gt;&amp;quot; /&amp;gt;&lt;br /&gt;
               &amp;lt;/SSLHostConfig&amp;gt;&lt;br /&gt;
    &amp;lt;/Connector&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
    		&lt;br /&gt;
&amp;lt;small&amp;gt;replace &amp;lt;LDOC_HOME&amp;gt; with the installation path of LogicalDOC&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Advice|LogicalDOC application will be updated from time to time so it is not safe to maintain the keystore inside the tomcat/ folder, please put your .pem files inside the conf/ folder of the LogicalDOC installation path.}}&lt;br /&gt;
&lt;br /&gt;
The port attribute (default value is 8443) is the TCP/IP port number on which Tomcat will listen for secure connections. You can change this to any port number you wish.&lt;br /&gt;
&lt;br /&gt;
If you change the port number here, you should also change the value specified for the redirectPort attribute on the non-SSL connector. This allows Tomcat to automatically redirect users who attempt to access a page with a security constraint specifying that SSL is required.&lt;br /&gt;
&lt;br /&gt;
After completing these configuration changes, you must restart LogicalDOC as you normally do, you should be able to access via SSL. For example, try:&lt;br /&gt;
&lt;br /&gt;
    https://localhost:8443&lt;br /&gt;
&lt;br /&gt;
and you should see the usual login page.&lt;br /&gt;
&lt;br /&gt;
== Install PFX certificates ==&lt;br /&gt;
&lt;br /&gt;
As regards certificates with the .pfx or .p12 extension, there is no need to convert them, because they are certificate archives already supported by Tomcat.&lt;br /&gt;
&lt;br /&gt;
Modify the value of the Connector attribute in the server.xml file to the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Connector protocol=&amp;quot;org.apache.coyote.http11.Http11NioProtocol&amp;quot;&lt;br /&gt;
               port=&amp;quot;8443&amp;quot; maxThreads=&amp;quot;200&amp;quot; &lt;br /&gt;
               URIEncoding=&amp;quot;UTF-8&amp;quot; server=&amp;quot;Undisclosed&amp;quot;&lt;br /&gt;
               maxHttpHeaderSize=&amp;quot;16384&amp;quot;			   &lt;br /&gt;
               scheme=&amp;quot;https&amp;quot; secure=&amp;quot;true&amp;quot; SSLEnabled=&amp;quot;true&amp;quot;&lt;br /&gt;
               clientAuth=&amp;quot;false&amp;quot; &lt;br /&gt;
               sslProtocol=&amp;quot;TLSv1.1+TLSv1.2+TLSv1.3&amp;quot;&lt;br /&gt;
               keystoreFile=&amp;quot;${catalina.home}/../conf/mycert.pfx&amp;quot;  # Path of the certificate file&lt;br /&gt;
               keystoreType=&amp;quot;PKCS12&amp;quot; &lt;br /&gt;
               keystorePass=&amp;quot;certpasswd&amp;quot; # Replace the value with the password of your certificate &lt;br /&gt;
               /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Save the file and restart LogicalDOC service/daemon.&lt;br /&gt;
&lt;br /&gt;
Now you can access LogicalDOC pointing your browser to https://YourServerDomain:8443 (ofc replace &#039;YourServerDomain&#039; with the actual domain of your server).&lt;br /&gt;
&lt;br /&gt;
This procedure works for both certificate files with the .pfx extension and those with the .p12 extension&lt;/div&gt;</summary>
		<author><name>Blucecio</name></author>
	</entry>
</feed>