POST Data
All operations that change the state of an object MUST use HTTP POST. Since this
binding is optimized for use in browser applications, the format of the transferred data
is aligned to the capabilities of HTML forms and described here in HTML terms.
The submission method (HTML form attribute “method”) MUST be “POST”. The
encoding type (HTML form attribute “enctype”) MUST be either "application/x-wwwform-urlencoded" or "multipart/form-data" if no content stream is attached to the form.
The encoding type MUST be “multipart/form-data” if a content stream is attached to the
form data.
The names of the controls within the form are defined by the patterns in the following
sections. All control names are case-insensitive as defined by the HTML specification.
Control names MUST be unique within a form. If the control value of an optional
parameter is set to an empty string (“”) the default value MUST be used.
A client MAY add controls to a form that are not defined by CMIS if the control names
don’t conflict with the patterns described below.
CMIS Action
A client MUST include a control named “cmisaction” that indicates the operation that
should be performed. See section 1.4.3 for valid control values.
Example:
<input name="cmisaction" type="hidden" value="createDocument" />
Structured and Array Parameters
Some CMIS operations require structured parameters and arrays of values. HTML forms
don’t support that.
In order to overcome this gap, some CMIS operation parameters are split into multiple
controls in a form.
For example, a CMIS property is split into a control that holds the property id and
another control that hold property value. The association between the two controls is
done by convention.
The entirety of all properties is made up of an array of these property controls.
Names of controls that are part of an array end with “[<index>]” where <index> is a
positive integer. Arrays MUST always start with the index 0 and MUST be gapless.
An array of three properties looks like this in a HTML form:
<input name="propertyId[0]"
type="hidden" value="cmis:name" />
<input name="propertyValue[0]" type="text"
value="my document" />
<input name="propertyId[1]"
type="hidden" value="cmis:objectTypeId" />
<input name="propertyValue[1]" type="hidden" value="my:firstObjectType" />
<input name="propertyId[2]"
type="hidden" value="my:intProperty" />
<input name="propertyValue[2]" type="text"
value="42" />
If a client sends invalid, incomplete or inconsistent data the repository SHOULD return
an invalidArgument error.
CMIS Controls
This sections lists all controls used by CMIS operations.
Ids
Object id:
Control name:
Control value:
“objectId”
Object id
Example:
<input name="objectId" type="hidden" value="1234-abcd-5678" />
Folder id:
Control name:
Control value:
“folderId”
Folder id
Example:
<input name="folderId" type="hidden" value="1234-abcd-5678" />
Source folder id:
Control name:
Control value:
“sourceFolderId”
Folder id
Example:
<input name="sourceFolderId" type="hidden" value="1234-abcd-5678" />
Target folder id:
Control name:
Control value:
“targetFolderId”
Folder id
Example:
<input name="targetFolderId" type="hidden" value="1234-abcd-5678" />
Single-value Property
A single-value property is made up of a “propertyId” control and a “propertyValue”
control with the same <propIndex>. If the property should be unset the “propertyValue”
control MUST NOT be present.
<propIndex> does not imply any order.
Property Id:
Control name:
Control value:
“propertyId[<propIndex>]”
Property id
Property value:
Control name:
Control value:
“propertyValue[<propIndex>]”
Property value
Example:
<input name="propertyId[0]"
type="hidden" value="my:firstname" />
<input name="propertyValue[0]" type="text"
value="John" />
<input name="propertyId[1]"
type="hidden" value="my:lastname" />
<input name="propertyValue[1]" type="text"
value="Smith" />
Multi-value Property
A multi-value property is made up a “propertyId” control and a series of
“propertyValue” controls with the same <propIndex>. If the property should be unset
no “propertyValue” control MUST be present.
<propIndex> does not imply any order, but <seqIndex> defines the order of the values.
Property Id:
Control name:
Control value:
“propertyId[<propIndex>]”
Property id
Property values:
Control name:
Control value:
“propertyValue[<propIndex>][<seqIndex>]”
Property value at position <seqIndex>
Example:
<input
<input
<input
<input
<input
name="propertyId[0]"
name="propertyValue[0][0]"
name="propertyValue[0][1]"
name="propertyValue[0][2]"
name="propertyValue[0][3]"
type="hidden"
type="text"
type="text"
type="text"
type="text"
value="my:countries" />
value="Germany" />
value="United States" />
value="France" />
value="United Kingdom" />
<input
<input
<input
<input
name="propertyId[1]"
name="propertyValue[1][0]"
name="propertyValue[1][1]"
name="propertyValue[1][2]"
type="hidden"
type="text"
type="text"
type="text"
value="my:colors" />
value="red" />
value="green" />
value="blue" />
ACEs to add
An ACE that should be added is made up of an “addACEPrincipal” control and zero or
more “addACEPermission” controls with the same <addACEIndex>.
<addACEIndex> and <permIndex> don’t imply any order.
Principal:
Control name:
Control value:
“addACEPrincipal[<addACEIndexs>]”
Principal id
Permission:
Control name:
Control value:
“addACEPermission[<addACEIndex>][<permIndex>]”
Permission id
Example:
<input name="addACEPrincipal[0]"
type="hidden" value="john" />
<input name="addACEPermission[0][0]" type="hidden" value="cmis:read" />
<input name="addACEPermission[0][1]" type="hidden" value="perm:publish" />
<input name="addACEPrincipal[1]"
type="hidden" value="mary" />
<input name="addACEPermission[1][0]" type="hidden" value="cmis:all" />
ACEs to remove
An ACE that should be removed is made up of a “removeACEPrincipal” control and zero
or more “removeACEPermission” controls with the same <removeACEIndex>.
<removeACEIndex> and <permIndex> don’t imply any order.
Principal:
Control name:
Control value:
“removeACEPrincipal[<removeACEIndex>]”
Principal id
Permission:
Control name:
Control value:
“removeACEPermission[<removeACEIndex>][<permIndex>]”
Permission id
Example:
<input name="removeACEPrincipal[0]"
type="hidden" value="tom" />
<input name="removeACEPermission[0][0]" type="hidden" value="cmis:write" />
<input name="removeACEPermission[0][1]" type="hidden" value="perm:publish" />
<input name="removeACEPrincipal[1]"
type="hidden" value="bob" />
<input name="removeACEPermission[1][0]" type="hidden" value="perm:forward" />
ACL propagation
ACL propagation:
Control name:
Control value:
Example:
“ACLPropagation”
ACL propagation enum
("objectonly", "propagate", "repositorydetermined")
<input name="ACLPropagation" type="hidden" value="propagate" />
Policies
A policy list is made up of a series of “policy” controls.
<policyIndex> does not imply any order.
Policy:
Control name:
Control value:
“policy[<policyIndex>]”
Policy id
Example:
<input name=" policy[0]" type="hidden" value="1111-aaaa-2222" />
<input name=" policy[1]" type="hidden" value="3333-bbbb-4444" />
<input name=" policy[2]" type="hidden" value="5555-cccc-6666" />
Change Token
Change token:
Control name:
Control value:
“changeToken”
Change token
If the change token is set to an empty string (“”) then it MUST be
treated as it is not set
Example:
<input name="changeToken" type="hidden" value="8923653942" />
Versioning state
Versioning State:
Control name:
Control value:
“versioningState”
Versioning state enum ("none", "major", "minor", "checkedout")
Example:
<input name=" versioningState" type="hidden" value="major" />
Checkin Comment
Checkin comment:
Control name:
Control value:
“checkinComment”
Checkin comment
Example:
<input name="checkinComment" type="text" value="My comment" />
Query
Statement:
Control name:
Control value:
“statement”
CMIS query statement
Search all versions:
Control name:
Control value:
“searchAllVersions”
boolean (“true”, “false”)
Include relationships:
Control name:
“includeRelationships”
Control value:
includeRelationships enum
("none", "source" ,"target", "both")
Rendition filter:
Control name:
Control value:
“renditionFilter”
rendition filter
Include allowable actions:
Control name:
“includeAllowableActions”
Control value:
boolean (“true”, “false”)
Max items:
Control name:
Control value:
“maxItems”
non-negative integer
Skip count:
Control name:
Control value:
“skipCount”
non-negative integer
Example:
<input
<input
<input
<input
<input
<input
<input
name="statement" type="text" value="SELECT *
name="searchAllVersions"
type="hidden"
name="includeRelationships"
type="hidden"
name="renditionFilter"
type="hidden"
name="includeAllowableActions" type="hidden"
name="maxItems"
type="hidden"
name="skipCount"
type="hidden"
Content
A file select control SHOULD be used to attach content.
Content:
Control name:
Control value:
Control type:
“content”
none
“file”
Example:
<input name="content" type="file" />
FROM cmis:document" />
value="false" />
value="none" />
value="cmis:none" />
value="false" />
value="100" />
value="0" />
Control values
Since control values are strings, all other data types have to be serialized to strings.
The same rules that apply to the serialization to JSON apply here.
© Copyright 2026 Paperzz