API
1. RESTful API
Access Control offers increased control and flexibility through the support of a RESTful (Representational State Transfer) API for accessing a set of resources through a fixed set of operations.
Prerequisites
Provided examples use Curl on the command line, but many other delivery mechanisms can achieve the same thing against a Restful API will.
Authentication
Provided examples show the use of admin:password credentials for clarity. Clearly you shouldn't use this approach for production. It can be beneficial to create a suitably permissioned user exclusively for API duties.
- All calls use the base URI:
        http(s)://<server-host>:8082/api/<resource> 
- The Internet media type of the data supported by the web service is application/xml.
- The API is hypertext driven, using the following HTTP methods:
| Type | Action | 
| POST | Create a resource on the server | 
| GET | Retrieve a resource from the server | 
| PUT | Modify the state of a resource | 
| DELETE | Remove a resource | 
Online documentation
You can review a copy of the bundled API documenation. This documentation is taken straight from a live installation. Given that the documentation is automatically generated, it frequently links to local files and resources that will not be available here.
General examples
- Create a replication group
- Perform a node induction
- Remove a node
- Add an existing repository
- Invoke a consistency check
- Perform a license status check
- List all pending transactions
Create a replication group
Replication Groups
This page details how to manage your replication groups using the available REST API. Read more about the replication-groups end point.
Authentication
Requires basic authentication to an administrator account.
Access point
protocol://node:port/api/replication-groups
- protocolis either- http(without SSL) or- https(with SSL)
- nodeis the IP address or hostname of the SVN MultiSite Plus node that will serve the request.
- portis the port used for the REST API, which defaults to- 8082.
GET
Retrieves a list of replication groups.
Parameters
- withPendingTransactions- Default value: false
- Set to trueto include pending transactions in the response
- Set to falseto omit pending transactions in the response
 
- Default value: 
Output
The HTML response code is included in the section headings describing the various types of output.
- dsmId- The replication group's state machine ID
- groupStarted- A boolean indicating whether the replication group's state machine is active
- replicationGroupIdentity- The replication group's unique ID
- pendingTransactions- If the- withPendingTransactionsparameter is- true, this element will be included and will give a count of pending transactions for the replication group.
- replicationGroupName- The replication group's common (display) name, as seen in the user interface
- rotationSuspended- A boolean indicating whether schedule rotation is suspended in the replication group
- scheduleManagingNodeId- The unique ID of the node that manages the replication group's schedule
- managingNode- A boolean that indicates if this node is the replication group's managing node
- role- The node's role in the replication group.
- nodeIdentity- The node's unique ID
- locationIdentity- The node's unique location ID
- isLocal- A boolean indicating whether the node is local to the node that is serving the request
- isUp- A boolean indicating whether the replicator on the node is running
- isStopped- A boolean indicating whether the replicator on the node is not handling requests
- lastStatusChange- A UNIX epoch timestamp indicating when the node's status last changed
- eco.system.membership- The unique ID of the node's ecosystem membership
- eco.system.dsm.identity- The unique ID of the node's ecosystem state machine
- node.name- The common (display) name for the node, as seen in the user interface
- dayOfWeekThe day that this schedule phase becomes active.
- hourOfDayThe hour of the day (0-23) that this schedule phase becomes active.
- membershipIdThe unique ID of the scheduled phase's membership
- quorumA boolean indicating whether the schedule will adjust quorum
- scheduledA boolean indicating whether the phase is actively scheduled
- A list of scheduledNodes, each of which contains:- managingNodeA boolean indicating whether the node is the managing node during this phase of the schedule
- A nodeelement, containing information similar to that returned in nodes
 
200 - Success
Success returns an XML-formatted document that describes each replication group.  The XML document is a tree rooted at replicationgrouplist.  Each replicationgroup has the following elements:
Each replication group has one or more repositoryIds elements, the body of which lists the unique ID of a repository in the replication group.
Each replication group has a list of replicationGroupNodes, each of which has the following elements.
Under the node tree, each node also has the following information.
Each node also has a list of attributes.  Each attribute has a key and a value.  Common and useful attributes include:
The replication group element also includes a schedule block that describes the replication group's schedule.  For each unique phase of the schedule, this block will contain:
400 - Processing error
The request was invalid or the node could not process it successfully. The output will contain an error message with more details.
401 - Invalid authentication
Invalid authentication returns a brief XML document that embeds an HTML-formatted error message.
Usage examples
In the following examples we use:
- adminas an administrator account name
- passas the credential for the- adminaccount
- http://192.168.56.190as the IP address of the SVN MultiSite Plus node
- 8082as the REST port
Default
curl -u admin:pass http://192.168.56.190:8082/api/replication-groups
Returns a list of replication groups.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<replicationgrouplist>
  <replicationgroup>
    <dsmId>3f049150-0658-11e4-9d99-080027b651cd</dsmId>
    <groupStarted>true</groupStarted>
    <nodes>
      <replicationGroupNodes>
        <managingNode>false</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity>
          <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity>
          <isLocal>false</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1411397169893</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56191</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
      <replicationGroupNodes>
        <managingNode>false</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
          <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
          <isLocal>false</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1411397207914</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56192</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
      <replicationGroupNodes>
        <managingNode>true</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
          <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
          <isLocal>true</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1404787853739</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56190</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
    </nodes>
    <replicationGroupIdentity>3f04df72-0658-11e4-9d99-080027b651cd</replicationGroupIdentity>
    <replicationGroupName>3 Nodes Group</replicationGroupName>
    <repositoryIds>5dc5a543-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5d75b075-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5d0c674f-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5ddcd6cb-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5e006466-0658-11e4-9d99-080027b651cd</repositoryIds>
    <rotationSuspended>false</rotationSuspended>
    <schedule>
      <scheduledNodeLists>
        <dayOfWeek>7</dayOfWeek>
        <hourOfDay>0</hourOfDay>
        <membershipId>3f04b861-0658-11e4-9d99-080027b651cd</membershipId>
        <quorum>true</quorum>
        <scheduled>true</scheduled>
        <scheduledNodes>
          <managingNode>false</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity>
            <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity>
            <isLocal>false</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1411397169893</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56191</value>
              </attribute>
            </attributes>
          </node>
          <role>AV</role>
        </scheduledNodes>
        <scheduledNodes>
          <managingNode>false</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
            <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
            <isLocal>false</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1411397207914</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56192</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
            </attributes>
          </node>
          <role>AV</role>
        </scheduledNodes>
        <scheduledNodes>
          <managingNode>true</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
            <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
            <isLocal>true</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1404787853739</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56190</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
            </attributes>
          </node>
          <role>AVT</role>
        </scheduledNodes>
      </scheduledNodeLists>
    </schedule>
    <scheduleManagingNodeId>abb21772-5544-43e2-9cb9-ff1node56190</scheduleManagingNodeId>
  </replicationgroup>
</replicationgrouplist>
Include pending transactions in output
curl -u admin:pass http://192.168.56.190:8082/api/replication-groups?withPendingTransactions=true
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<replicationgrouplist>
  <replicationgroup>
    <dsmId>3f049150-0658-11e4-9d99-080027b651cd</dsmId>
    <groupStarted>true</groupStarted>
    <nodes>
      <replicationGroupNodes>
        <managingNode>false</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity>
          <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity>
          <isLocal>false</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1411397169893</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56191</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
      <replicationGroupNodes>
        <managingNode>false</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
          <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
          <isLocal>false</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1411397207914</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56192</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
      <replicationGroupNodes>
        <managingNode>true</managingNode>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
          <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
          <isLocal>true</isLocal>
          <isUp>true</isUp>
          <isStopped>false</isStopped>
          <lastStatusChange>1404787853739</lastStatusChange>
          <attributes>
            <attribute>
              <key>eco.system.membership</key>
              <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
            </attribute>
            <attribute>
              <key>node.name</key>
              <value>node56190</value>
            </attribute>
            <attribute>
              <key>eco.system.dsm.identity</key>
              <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
            </attribute>
          </attributes>
        </node>
        <role>AV</role>
      </replicationGroupNodes>
    </nodes>
    <pendingTransactions>0</pendingTransactions>
    <replicationGroupIdentity>3f04df72-0658-11e4-9d99-080027b651cd</replicationGroupIdentity>
    <replicationGroupName>3 Nodes Group</replicationGroupName>
    <repositoryIds>5dc5a543-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5d75b075-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5d0c674f-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5ddcd6cb-0658-11e4-9d99-080027b651cd</repositoryIds>
    <repositoryIds>5e006466-0658-11e4-9d99-080027b651cd</repositoryIds>
    <rotationSuspended>false</rotationSuspended>
    <schedule>
      <scheduledNodeLists>
        <dayOfWeek>7</dayOfWeek>
        <hourOfDay>0</hourOfDay>
        <membershipId>3f04b861-0658-11e4-9d99-080027b651cd</membershipId>
        <quorum>true</quorum>
        <scheduled>true</scheduled>
        <scheduledNodes>
          <managingNode>false</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity>
            <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity>
            <isLocal>false</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1411397169893</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56191</value>
              </attribute>
            </attributes>
          </node>
          <role>AV</role>
        </scheduledNodes>
        <scheduledNodes>
          <managingNode>false</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
            <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
            <isLocal>false</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1411397207914</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56192</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
            </attributes>
          </node>
          <role>AV</role>
        </scheduledNodes>
        <scheduledNodes>
          <managingNode>true</managingNode>
          <node>
            <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
            <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
            <isLocal>true</isLocal>
            <isUp>true</isUp>
            <isStopped>false</isStopped>
            <lastStatusChange>1404787853739</lastStatusChange>
            <attributes>
              <attribute>
                <key>eco.system.membership</key>
                <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value>
              </attribute>
              <attribute>
                <key>node.name</key>
                <value>node56190</value>
              </attribute>
              <attribute>
                <key>eco.system.dsm.identity</key>
                <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value>
              </attribute>
            </attributes>
          </node>
          <role>AVT</role>
        </scheduledNodes>
      </scheduledNodeLists>
    </schedule>
    <scheduleManagingNodeId>abb21772-5544-43e2-9cb9-ff1node56190</scheduleManagingNodeId>
  </replicationgroup>
</replicationgrouplist>
Invalid authentication
curl -u admin:wrongpass http://192.168.56.190:8082/api/replication-groups
<?xml version="1.0"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 401 No client with requested id: admin</title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing /api/replication-groups. Reason:
<pre>    No client with requested id: admin</pre></p>
<hr /><i><small>Powered by Jetty://</small></i>
</body>
</html>
POST
Create a new replication group.
Request body
An XML document that describes the new replication group.  The root element is replicationGroup and it contains the following elements.
- replicationGroupNameThe common (display) name for the new replication group
- replicationGroupIdentityAn empty element
- scheduleA block listing the desired schedule, including the nodes that will constitute the replication group. See the GET description for how to construct this block. Note:- The new replication group must satisfy the normal rules of quorum during all phases of the schedule.
- One node must function as the managing node.
 
Output
The HTML response code is included in the section headings describing the various types of output.
202 - Success
Success returns the 202 response code with no further information.
400 - Processing error
The request was invalid or the node could not process it successfully. The output will contain an error message with more details.
401 - Invalid authentication
Invalid authentication returns a brief XML document that embeds an HTML-formatted error message.
Usage examples
In the following examples we use:
- adminas an administrator account name
- passas the credential for the- adminaccount
- http://192.168.56.190as the IP address of the SVN MultiSite Plus node
- 8082as the REST port
- A set of example node identities and location identities. These can be gleaned from the nodes end point.
Creating a new group
Using this data as the response body:
<?xml version="1.0"?>
<replicationGroup>
  <replicationGroupName>All Nodes Group</replicationGroupName>
  <schedule>
    <scheduledNodeLists>
      <dayOfWeek>7</dayOfWeek>
      <scheduledNodes>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity>
          <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity>
        </node>
        <role>AVT</role>
        <managingNode>true</managingNode>
      </scheduledNodes>
      <scheduledNodes>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
          <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
        </node>
        <role>AV</role>
        <managingNode>false</managingNode>
      </scheduledNodes>
      <scheduledNodes>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
          <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
        </node>
        <role>AV</role>
        <managingNode>false</managingNode>
      </scheduledNodes>
    </scheduledNodeLists>
  </schedule>
  <replicationGroupIdentity/>
</replicationGroup>
curl -u admin:pass -X POST -d "<replicationGroup><replicationGroupName>All Nodes Group</replicationGroupName><schedule><scheduledNodeLists><dayOfWeek>7</dayOfWeek><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity><locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity></node><role>AVT</role><managingNode>true</managingNode></scheduledNodes><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity><locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity><locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes></scheduledNodeLists></schedule><replicationGroupIdentity></replicationGroupIdentity></replicationGroup>" --header 'Content-Type: application/xml' http://192.168.56.191:8082/api/replication-groups
Aside from the 202 response code there is no further output.
Invalid request
Using this response body:
<?xml version="1.0"?>
<replicationGroup>
  <replicationGroupName>All Nodes Group</replicationGroupName>
  <schedule>
    <scheduledNodeLists>
      <dayOfWeek>7</dayOfWeek>
      <scheduledNodes>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity>
          <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity>
        </node>
        <role>AV</role>
        <managingNode>false</managingNode>
      </scheduledNodes>
      <scheduledNodes>
        <node>
          <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity>
          <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity>
        </node>
        <role>AV</role>
        <managingNode>false</managingNode>
      </scheduledNodes>
    </scheduledNodeLists>
  </schedule>
  <replicationGroupIdentity/>
</replicationGroup>
curl -u admin:pass -X POST -d "<replicationGroup><replicationGroupName>All Nodes Group</replicationGroupName><schedule><scheduledNodeLists><dayOfWeek>7</dayOfWeek><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity><locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity><locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes></scheduledNodeLists></schedule><replicationGroupIdentity></replicationGroupIdentity></replicationGroup>" --header 'Content-Type: application/xml' http://192.168.56.191:8082/api/replication-groups
This request is invalid as it includes two nodes with no tie-breaker, violating quorum requirements. The output is:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<exception>
  <class>com.wandisco.nodes.groups.exceptions.UnsupportedMembershipException</class>
  <message>Memberships with an even number of acceptors should have a DN defined</message>
  <stack-trace>com.wandisco.nodes.groups.exceptions.UnsupportedMembershipException: Memberships with an even number of acceptors should have a DN defined
        at com.wandisco.application.tasks.membership.MembershipUtils.checkRoles(MembershipUtils.java:386)
        at com.wandisco.application.tasks.membership.MembershipUtils.checkRoles(MembershipUtils.java:343)
        at com.wandisco.application.dao.ReplicationGroupDAO.checkMemberships(ReplicationGroupDAO.java:426)
        at com.wandisco.application.dao.ReplicationGroupDAO.createReplicationGroup(ReplicationGroupDAO.java:302)
        at com.wandisco.application.rest.resources.ReplicationGroupResource.createReplicationGroup(ReplicationGroupResource.java:121)
        at com.wandiscoapi.fsfs.api.resources.ReplicationGroupsResource.createReplicationGroup(ReplicationGroupsResource.java:291)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60)
        at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205)
        at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
        at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302)
        at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
        at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
        at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1511)
        at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1442)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1391)
        at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1381)
        at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538)
        at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
        at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:643)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1331)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118)
        at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationProcessingFilter.doFilter(OAuth2AuthenticationProcessingFilter.java:131)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:57)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50)
        at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342)
        at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192)
        at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160)
        at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343)
        at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1302)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:448)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1067)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:377)
        at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:192)
        at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1001)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
        at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:250)
        at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:111)
        at org.eclipse.jetty.server.Server.handle(Server.java:360)
        at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:454)
        at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:900)
        at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:954)
        at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:851)
        at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
        at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:77)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622)
        at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
        at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
        at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
        at java.lang.Thread.run(Thread.java:722)
</stack-trace>
</exception>
Invalid authentication
`curl -u admin:wrongpass -X POST -d "<replicationGroup><replicationGroupName>All Nodes Group</replicationGroupName><schedule><scheduledNodeLists><dayOfWeek>7</dayOfWeek><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity><locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes><scheduledNodes><node><nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity><locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity></node><role>AV</role><managingNode>false</managingNode></scheduledNodes></scheduledNodeLists></schedule><replicationGroupIdentity></replicationGroupIdentity></replicationGroup>" --header 'Content-Type: application/xml' http://192.168.56.191:8082/api/replication-groups`
<?xml version="1.0"?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>
<title>Error 401 No client with requested id: admin</title>
</head>
<body>
<h2>HTTP ERROR: 401</h2>
<p>Problem accessing /api/replication-groups. Reason:
<pre>    No client with requested id: admin</pre></p>
<hr/><i><small>Powered by Jetty://</small></i>
</body>
</html>
Nodes Endpoint
This page details how to manage your Nodes using the available REST API. Read more about the Nodes end point.
- Authentication
- Access point
- protocolis either- http(without SSL) or- https(with SSL)
- nodeis the IP address or hostname of the SVN MultiSite Plus node that will serve the request.
- portis the port used for the REST API, which defaults to- 8082.
- withRemoved- Default value: false
- Set to trueto include removed nodes in the response
- Set to falseto omit removed nodes in the response
 - Output- The HTML response code is included in the section headings describing the various types of output. - 200 - Success- Success returns an XML-formatted document that describes each node. The XML document is a tree of - nodes. Each- nodehas the following elements:- nodeIdentity- The node's unique ID
- locationIdentity- The node's unique location ID
- isLocal- A boolean indicating whether the node is local to the node that is serving the request
- isUp- A boolean indicating whether the replicator on the node is running
- isStopped- A boolean indicating whether the replicator on the node is not handling requests
- lastStatusChange- A UNIX epoch timestamp indicating when the node's status last changed
 - Each node also has a list of - attributes. Each- attributehas a- keyand a- value. Common and useful attributes include:- eco.system.membership- The unique ID of the node's ecosystem membership
- eco.system.dsm.identity- The unique ID of the node's ecosystem state machine
- node.name- The common (display) name for the node, as seen in the user interface
 - 401 - Invalid authentication- Invalid authentication returns a brief XML document that embeds an HTML-formatted error message. - Usage examples- In the following examples we use: - adminas an administrator account name
- passas the credential for the- adminaccount
- http://192.168.56.190as the IP address of the SVN MultiSite Plus node
- 8082as the REST port
 - Default- curl -u admin:pass http://192.168.56.190:8082/api/nodes- Returns a list of non-removed nodes. - <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <nodes> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity> <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity> <isLocal>false</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1411397169893</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> <attribute> <key>node.name</key> <value>node56191</value> </attribute> </attributes> </node> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity> <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity> <isLocal>false</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1411397207914</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>node.name</key> <value>node56192</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> </attributes> </node> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity> <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity> <isLocal>true</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1404787853739</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>node.name</key> <value>node56190</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> </attributes> </node> </nodes>- Include removed nodes in output- curl -u admin:pass http://192.168.56.190:8082/api/nodes?withRemoved=true- <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <nodes> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56191</nodeIdentity> <locationIdentity>3027fc8f-064e-11e4-b8d2-080027ec317a</locationIdentity> <isLocal>false</isLocal> <isUp>false</isUp> <isStopped>true</isStopped> <lastStatusChange>1411397169893</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> <attribute> <key>node.name</key> <value>node56191</value> </attribute> </attributes> </node> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56192</nodeIdentity> <locationIdentity>9ae09faf-0650-11e4-a747-0800279336f8</locationIdentity> <isLocal>false</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1411397207914</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>node.name</key> <value>node56192</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> </attributes> </node> <node> <nodeIdentity>abb21772-5544-43e2-9cb9-ff1node56190</nodeIdentity> <locationIdentity>d29772a0-0648-11e4-aaa1-080027b651cd</locationIdentity> <isLocal>true</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1404787853739</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value>ECO-MEMBERSHIP-190823c6-0658-11e4-a747-0800279336f8</value> </attribute> <attribute> <key>node.name</key> <value>node56190</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-d33204f1-0648-11e4-aaa1-080027b651cd</value> </attribute> </attributes> </node> </nodes>- Invalid authentication- curl -u admin:wrongpass http://192.168.56.190:8082/api/nodes- <?xml version="1.0"?> <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/> <title>Error 401 No client with requested id: admin</title> </head> <body> <h2>HTTP ERROR: 401</h2> <p>Problem accessing /api/nodes. Reason: <pre> No client with requested id: admin</pre></p> <hr/> <i> <small>Powered by Jetty://</small> </i> </body> </html>
 - Node Induction- Perform a node induction- To induct two or more nodes via API the following information need to be included in the XML payload that will be passed to the cURL command: - INDUCTION_XML- <inductionTicket> <inductorLocationId>${LOCATION_ID}</inductorLocationId> <inductorNodeId>${NODE_ID}</inductorNodeId> <inductorHostName>${INDUCTOR_HOST}</inductorHostName> <inductorPort>${INDUCTOR_DCONE}</inductorPort> </inductionTicket>- ${LOCATION_ID}
- The Location ID of the first node from which we are inducting.  You can capture the Location ID from the REST API's Nodes page. e.g. 
http://10.0.2.0:8082/api/nodes This returns the following information:<nodes> <node> <nodeIdentity>156d2cd8-0929-4333-a84e-350e6be44e4b</nodeIdentity> <locationIdentity>7b212e2f-486b-11e4-90b8-22564bb81bc7</locationIdentity> <isLocal>true</isLocal> <isUp>true</isUp> <isStopped>false</isStopped> <lastStatusChange>1412058720321</lastStatusChange> <attributes> <attribute> <key>eco.system.membership</key> <value> ECO-MEMBERSHIP-df34fdfc-486b-11e4-adb1-aa7004f22f33 </value> </attribute> <attribute> <key>node.name</key> <value>node1</value> </attribute> <attribute> <key>eco.system.dsm.identity</key> <value>ECO-DSM-7b86a6c0-486b-11e4-90b8-22564bb81bc7</value> </attribute> </attributes> </node> ... </nodes>You can also find the LocationID on the Settings screen of the admin UI.
- ${NODE_ID}
- The Node ID of the first node from we are inducting. This can also be found on the API's /api/nodesscreen (see above). It's also available on the Settings screen of the admin UI.
- ${INDUCTOR_HOST}
- The IP/hostname of the first node from which we are inducting.
- ${INDUCTOR_DCONE}
- The DConE port: this is chosen during installation and needs to be the same across all nodes. Default value is 6444.
 - Each node (apart from the first node from which we are inducting) will need the above XML. - Induction- The cURL command will look as follow (change to https for SSL API): - curl -u <username>:<password> -X PUT -d "${ABOVE_XML}" --header 'Content-Type: application/xml' http://<nodeIP>:<apiPort>/api/node/${NODE_ID_TO_BE_INDUCTED}- ${NODE_ID_TO_BE_INDUCTED}
- The Node ID of the node to which we are inducting.
 - An example of inducting Node2 (999aacc5-af77-43e7-a8de-9a921aimz3k4) from Node1 (999aacc5-af77-43e7-a8de-9a921apg0sby) would be: - curl -u admin:pass -X PUT -d '<inductionTicket><inductorLocationId>57b331ba-38f2-11e4-8958-3a2a7398d235</inductorLocationId><inductorNodeId>999aacc5-af77-43e7-a8de-9a921apg0sby</inductorNodeId><inductorHostName>172.16.2.50</inductorHostName><inductorPort>6444</inductorPort></inductionTicket>' --header 'Content-Type: application/xml' http://10.0.2.0:8082/api/node/999aacc5-af77-43e7-a8de-9a921aimz3k4 - Note that the NODE_ID in the XML (the first Node we're inducting from) is different from the NODE_ID of the URL (the Node we're inducting to). - This cURL command is repeated with the same XML and different NODE_ID in the URL for each node that needs to be inducted. Please note to leave enough time to complete an induction before attempting another induction, otherwise the second induction will be aborted. Timing
 Leave enough time to complete induction before attempting another induction. This approach is vulnerable to any possible delays that may occur during an induction. You can take a cautious approach leaving minutes between inductions just to make sure there was no issue.- Remove a node- This page describes how to remove a node from your SVN MultiSite replication group. Remove a node gives more details. - Use the following XML for the cURL command: - <nodes> <node> <nodeIdentity>${NODE_ID}</nodeIdentity> <locationIdentity>${LOCATION_ID}</locationIdentity> </node> </nodes>- ${NODE_ID}
- The node ID of the first node that you want to remove from the ecosystem. This is on the Settings screen and looks like "999aacc5-af77-43e7-a8de-9a921a45thuc". It is also in the /api/nodes page.
- ${LOCATION_ID}
- The location ID of the first node that you want to remove from the ecosystem. This is on the Settings screen and looks like "0488a9be-38ec-11e4-aa49-3a2a7398d235". It is also in the /api/nodes page.
 - The cURL command looks like this: - curl -u <username>: <password> -X PUT -d "${ABOVE_XML}" --header 'Content-Type: application/xml' http://<nodeIP>:<apiPort>/api/node/${LOCAL_NODE_ID}/removenodes- For SSL API change - httpto- https.- {LOCAL_NODE_ID}
- The node ID of the node that will remain part of the ecosystem. This is on the Settings screen. It is also in the /api/nodes page.
 - A working example would be: - curl -u admin:pass -X PUT -d "<nodes><node><nodeIdentity>999aacc5-af77-43e7-a8de-9a921aimz3k4</nodeIdentity><locationIdentity>483fcf8d-38f2-11e4-be09-4a9206cdc4f9</locationIdentity></node></nodes>" --header 'Content-Type: application/xml' http://172.16.2.50:8082/api/node/999aacc5-af77-43e7-a8de-9a921apg0sby/removenodes - If the call is successful the removed node is displayed in the Nodes page as REMOVED when you click Display Removed Nodes. - Add an existing repository- Here is an example procedure for adding a repository that is already present on your node under the control of SVN MultiSite Plus: - curl -u admin:pass -X POST -d "<svn-repository><name>$REPO_NAME</name><fileSystemPath>$REPO_LOCATION</fileSystemPath><globalReadOnly>false</globalReadOnly><localReadOnly>false</localReadOnly></svn-repository>" -H "Content-Type:application/xml" http://nodeIP:8082/api/repository?replicationGroupId=<rgId> - In the XML part obviously replace $REPO_NAME with the repository's name and $REPO_LOCATION with the repository's location (i.e. Repo1, /opt/Subversion/Repo1). Ensure that you use the appropriate credentials and replication group ID. - XML passed by -d can always be written into a file such as - repoXML.xmland then the call becomes:- curl -u admin:pass -X POST -d " as preferred.- @repoXML.xml" -H "Content-Type:application/xml" http://nodeIP:8082/api/repository?replicationGroupId=<rgId>- Invoke a consistency check- Example of a rest call to trigger a consistency check. - To perform a consistency check on a repository the repository ID need to be used in a cURL or equivalent command. The repository ID can be found by getting a list of the present repositories known to the target node/api/repositories page and will look something like "a6e0c5a3-47a2-11e4-8fe4-22564bb81bc". - root@redhat6 svn-multisite-plus]# curl -u admin:pass http://172.16.0.254:8082/api/repositories - Output- <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <svn-repositories> <repository> <dsmId>a6e643e4-47a2-11e4-8fe4-22564bb81bc7</dsmId> <fileSystemPath>/opt/Subversion/Repo0 </fileSystemPath> <globalReadOnly>false </globalReadOnly> <latestRevision> <revisionNum>0 </revisionNum> <size>26318 </size> <timestamp>1375431011000 </timestamp> </latestRevision> <localReadOnly>false </localReadOnly><name>Repo0</name> <readOnlyReason></readOnlyReason> <replicationGroupId>9a663117-47a2-11e4-8fe4-22564bb81bc7</replicationGroupId> <repositoryIdentity>a6e0c5a3-47a2-11e4-8fe4-22564bb81bc7</repositoryIdentity> <state xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="deployedStateDTO"/> </repository> <repository> <dsmId>ad6a5b3b-47a2-11e4-8fe4-22564bb81bc7</dsmId> <fileSystemPath>/opt/Subversion/Repo1</fileSystemPath>...- The cURL command will look like (change to https for SSL API): - curl -u <username>:<password> -X POST http://<nodeIP>:<apiPort>/api/repository/${REPOSITORY_ID}/consistencyCheck- It is possible to specify the number of revisions to be checked (a value of -1 will check all revisions). This parameter will need to be appended at the end of the URL as follow: - curl -u <username>:<password> -X POST http://<nodeIP>:<apiPort>/api/repository/${REPOSITORY_ID}/consistencyCheck?numberOfRevisions=10- A working example would be: - curl -u admin:pass -X POST http://10.0.0.50:8082/api/repository/a6e0c5a3-47a2-11e4-8fe4-22564bb81bc7/consistencyCheck?numberOfRevisions=3 - License endpoint- Perform a license status check- To get the license status via API the following URL command needs to be used: - curl -u <username>:<password> http://<nodeIP>:<apiPort>/api/license - Example- curl -u api:password http://172.16.2.24:8082/api/license- Output- An example of the XML returned by the curl: - <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <license> <allowedIps></allowedIps> <companyName>The API Example Company</companyName> <rawproperties><licenseproperty> <key>lm-version</key> <value>bc15-direct</value> </licenseproperty> <licenseproperty> <key>fd-licver</key> <value>3614</value> </licenseproperty> <licenseproperty> <key>expiration</key> <value>10/19/2015</value> </licenseproperty> <licenseproperty> <key>eval-license</key> <value>true</value> </licenseproperty> <licenseproperty> <key>enterprise-cvs</key> <value>true</value> </licenseproperty> <licenseproperty> <key>nusers</key> <value>99</value> </licenseproperty> <licenseproperty> <key>ip</key> <value>xx.xx.xx.xx</value> </licenseproperty> <licenseproperty> <key>product</key> <value>svnplus</value> </licenseproperty> <licenseproperty> <key>maint_start</key> <value>1411038806</value> </licenseproperty> <licenseproperty> <key>company</key> <value>Name entered into the license</value> </licenseproperty> <licenseproperty> <key>maint_end</key> <value>1445253206</value> </licenseproperty> <licenseproperty> <key>scm</key> <value>svn</value> </licenseproperty> </rawproperties> <currentUsers>0</currentUsers> <expiry>1445209200000</expiry> <licenseType>Evaluation License</licenseType> <maxUsers>99</maxUsers> <numberOfNodes>0</numberOfNodes> </license>
- Default value: 
Authentication
Requires basic authentication to an administrator account.
Access point
protocol://node:port/api/nodes
GET
Parameters
Read more about REST API calls for LicenseResources
Pending transactions
List all pending transactions
To get pending transactions at a node via API the Node ID is required for the cURL command. The node ID can be found on the Settings screen and will look something like "999aacc5-af77-43e7-a8de-9a921a45thuc". Can also be found in the /api/nodes page.
The cURL command will look like (change to https for SSL API):
curl -u <username>:<password> http://<nodeIP>:<apiPort>/api/node/${NODE_ID}/pendingTransactions
This will return the number of pending transactions for the specified node.
A working example would be:
Example
curl -u admin:pass http://10.0.2.50:8082/api/node/999aacc5-af77-43e7-a8de-9a921afg6lei/pendingTransactions
Output
3[root@redhat6 svn-multisite-plus]#
The number of pending transactions are returned.
