Addons

Nuxeo Management REST API

Updated: November 14, 2019

The Nuxeo Management REST API is a set of endpoints allowing the management of the Nuxeo Platform.

This page explains these endpoints and their purpose.

Installation

This addon requires no specific installation steps. It can be installed like any other package with nuxeoctl command line or from the Update Center.

Configuration

Authentication

The Management REST API is accessible for any administrator user.

Furthermore, a "technical" user can be configured to access the Management REST API in nuxeo.conf:

org.nuxeo.rest.management.user=transient/technical_user

The user does not need to exist in Nuxeo, and must start with transient/ as we are relying on the transient user feature.

Once you have created the user, configure a JWT secret in nuxeo.conf:

nuxeo.jwt.secret=abracadabra

Then, to use the Management REST API:

  • Generate a JWT token with the user (transient/technical_user here) as claim subject,
  • Call the API using the Authorization: Bearer JWT_TOKEN header,
  • Share the JWT secret (abracadabra here) between the Nuxeo Server and the client calling the Management REST API.

Deploy the Management REST API on a Separate HTTP Port

For security reasons, it is recommended to deploy the Management REST API on a different port from the regular Nuxeo application one. For instance, see below to configure the HTTP port to 9090.

Configure the Management REST API HTTP Port

In nuxeo.conf, add:

nuxeo.server.http.managementPort=9090

Add a New Tomcat Connector

Add a new Connector for the Catalina Service in ./conf/server.xml like this one:

<Connector port="9090" protocol="HTTP/1.1" URIEncoding="UTF-8"
           address="0.0.0.0"
           maxThreads="2"
           acceptCount="10"
           compression="on"
           compressionMinSize="512"
           compressibleMimeType="text/css,application/javascript,text/xml,text/html"
           connectionTimeout="20000"
           disableUploadTimeout="false"
           connectionUploadTimeout="60000" />

Here is the FreeMarker version using nuxeo.conf properties:

<Connector port="${nuxeo.server.http.managementPort}" protocol="HTTP/1.1" URIEncoding="UTF-8"
               address="${nuxeo.bind.address}"
<#if nuxeo.server.signature??>
               server="${nuxeo.server.signature}"
</#if>
               maxThreads="2"
               acceptCount="10"
               compression="on"
               compressionMinSize="512"
               compressibleMimeType="text/css,application/javascript,text/xml,text/html"
               connectionTimeout="20000"
               disableUploadTimeout="false"
               connectionUploadTimeout="${nuxeo.server.http.connectionUploadTimeout}" />

You can find the default template holding this configuration under ./templates/common-base/conf/server.xml.nxftl in the Nuxeo Platform.

Management REST API Endpoints

Binaries Endpoint

To Garbage Collect the orphaned (unused) binaries as below:

DELETE http://localhost:8080/nuxeo/site/management/binaries/orphaned

Response

If successful, returns a JSON representation of the binary manager status.

Status Codes

  • 200 OK - Success.
  • 409 Conflict - Garbage collection is already in progress.

Sample

curl -X DELETE -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/binaries/orphaned
{
    "gcDuration": 6,
    "numBinaries": 1,
    "sizeBinaries": 4451,
    "numBinariesGC": 0,
    "sizeBinariesGC": 0,
    "gcduration": 6
}

Bulk Endpoint

To retrieve Bulk Action Status for a given command id.

GET http://localhost:8080/nuxeo/site/management/bulk/{commandID}

Path Parameters

Parameter Name Type Required Description
commandID string Yes The command id.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.
  • 404 Not Found - Command with the given commandID does not exist.

Sample

curl -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/bulk/COMMAND_ID
{
   "entity-type": "bulkStatus",
   "commandId": "0e1e6800-631a-4e04-a47c-241ea7b3596a",
   "state": "SCHEDULED",
   "processed": 0,
   "error": false,
   "errorCount": 0,
   "total": 0,
   "action": "recomputeThumbnails",
   "username": "system",
   "submitted": "2019-07-26T12:13:31.361Z",
   "scrollStart": null,
   "scrollEnd": null,
   "processingStart": null,
   "processingEnd": null,
   "completed": null,
   "processingMillis": 0
}

Distribution Endpoint

To get the distribution information.

GET http://localhost:8080/nuxeo/site/management/distribution

Response

If successful, returns a JSON representation of the distribution information.

Status Codes

  • 200 OK - Success.

Sample

curl -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/distribution
{
  "org.nuxeo.ecm.product.name": "Nuxeo Platform",
  "org.nuxeo.ecm.product.version": "LTS 2019-HF17",
  "org.nuxeo.distribution.name": "server",
  "org.nuxeo.distribution.version": "10.10",
  "org.nuxeo.distribution.server": "tomcat",
  "org.nuxeo.distribution.date": "201901211253",
  "warnings": [],
  "nuxeo.osgi.bundles": [
    {
      "name": "org.nuxeo.admin.center",
      "version": "10.10-HF11"
    },

    ...other happy bundles...

  ]
}

Elasticsearch Endpoints

The following endpoints are useful when the Nuxeo Platform leverages Elasticsearch.

Reindex

Reindex a Repository or a Set of Documents

To reindex an entire repository or a set of documents using an NXQL query.

POST http://localhost:8080/nuxeo/site/management/elasticsearch/{REPOSITORY_NAME}/reindex?query=QUERY

Path Parameters

Parameter Name Type Required Description
REPOSITORY_NAME string Yes The repository name.

Query Parameters

Parameter Name Type Required Description
query string No The NXQL query.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.

Sample

To reindex the default repository:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/elasticsearch/default/reindex
{
   "entity-type": "bulkStatus",
   "commandId": "d3bc0a81-b061-447f-b307-c3db78b5f457",
   "state": "SCHEDULED",
   "processed": 0,
   "error": false,
   "errorCount": 0,
   "total": 0,
   "action": "index",
   "username": "system",
   "submitted": "2019-07-26T14:12:29.224Z",
   "scrollStart": null,
   "scrollEnd": null,
   "processingStart": null,
   "processingEnd": null,
   "completed": null,
   "processingMillis": 0
}

To reindex a set of documents on a given Nuxeo repository matching the NXQL query:
SELECT * FROM Document WHERE dc:title LIKE 'My Title%'

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/elasticsearch/default/reindex?query=SELECT+%2A+FROM+document+WHERE+dc%3Atitle+LIKE+%27My+Title%25%27%27
{  
   "entity-type":"bulkStatus",
   "commandId":"90037d73-ed19-48cc-a4ad-09f3999cf014",
   "state":"SCHEDULED",
   "processed":0,
   "error":false,
   "errorCount":0,
   "total":0,
   "action":"index",
   "username":"system",
   "submitted":"2019-07-26T09:26:08.761Z",
   "scrollStart":null,
   "scrollEnd":null,
   "processingStart":null,
   "processingEnd":null,
   "completed":null,
   "processingMillis":0
  }
Reindex a Document

To reindex a given document and its children recursively on a specific repository.

POST http://localhost:8080/nuxeo/site/management/elasticsearch/{REPOSITORY_NAME}/{DOC_ID}/reindex

Path Parameters

Parameter Name Type Required Description
REPOSITORY_NAME string Yes The repository name.
DOC_ID string Yes The document Id.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.

Sample

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/elasticsearch/default/1fa9d3fa-04cc-4956-bc6c-8317b803e131/reindex
{  
   "entity-type":"bulkStatus",
   "commandId":"f37503d3-51b2-462e-8f1e-fa240fafa861",
   "state":"SCHEDULED",
   "processed":0,
   "error":false,
   "errorCount":0,
   "total":0,
   "action":"index",
   "username":"system",
   "submitted":"2019-07-26T09:45:09.874Z",
   "scrollStart":null,
   "scrollEnd":null,
   "processingStart":null,
   "processingEnd":null,
   "completed":null,
   "processingMillis":0
 }

All the indexing endpoints defined above use the Bulk Action Framework, and can be monitored using the Bulk Endpoint.

Flush

To flush a repository.

POST http://localhost:8080/nuxeo/site/management/elasticsearch/{REPOSITORY_NAME}/flush

Path Parameters

Parameter Name Type Required Description
REPOSITORY_NAME string Yes The repository name.

Status Codes

  • 204 No Content - Success.

Sample

To flush the default repository:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/elasticsearch/default/flush

Optimize

To optimize a repository.

POST http://localhost:8080/nuxeo/site/management/elasticsearch/{REPOSITORY_NAME}/optimize

Path Parameters

Parameter Name Type Required Description
REPOSITORY_NAME string Yes The repository name.

Status Codes

  • 204 No Content - Success.

Sample

To optimize the default repository:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/elasticsearch/default/optimize

Probes Endpoint

Get Probe Information

GET http://localhost:8080/nuxeo/site/management/probes/{PROBE_NAME}

Path Parameters

Parameter Name Type Required Description
PROBE_NAME string No The probe name. If not specified, returns all probes.

Response

If successful, returns a JSON representation of the requested probe information.

Status Codes

  • 200 OK - Success.
  • 404 Not Found - Probe with the given PROBE_NAME does not exist.

Sample

To get the ldapDirectories probe information:

curl -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/probes/ldapDirectories
{
  "name": "ldapDirectories",
  "status": {
    "neverExecuted": true,
    "success": false,
    "infos": {
      "info": "[unavailable]"
    }
  },
  "history": {
    "lastRun": null,
    "lastSuccess": "1970-01-01T00:00:00",
    "lastFail": "1970-01-01T00:00:00"
  },
  "counts": {
    "run": 0,
    "success": 0,
    "failure": 0
  },
  "time": 0
}

To get all probes:

curl -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/probes
{
  "entity-type": "probes",
  "entries": [
    {
      "name": "ldapDirectories",
      "status": {
        "neverExecuted": true,
        "success": false,
        "infos": {
          "info": "[unavailable]"
        }
      },
      "history": {
        "lastRun": null,
        "lastSuccess": "1970-01-01T00:00:00",
        "lastFail": "1970-01-01T00:00:00"
      },
      "counts": {
        "run": 0,
        "success": 0,
        "failure": 0
      },
      "time": 0
    },

    ...other happy probes...

  ]
}

Run a Probe

POST http://localhost:8080/nuxeo/site/management/probes/{PROBE_NAME}

Path Parameters

Parameter Name Type Required Description
PROBE_NAME string Yes The probe name.

Sample

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/probes/ldapDirectories

Response

If successful, returns a JSON representation of the run probe information.

Status Codes

  • 200 OK - Success.
  • 404 Not Found - Probe with the given PROBE_NAME does not exist.
{
  "name": "ldapDirectories",
  "status": {
    "neverExecuted": false,
    "success": true,
    "infos": {
      "info": "No configured LDAP directory"
    }
  },
  "history": {
    "lastRun": "2019-10-31T16:45:49.514",
    "lastSuccess": "2019-10-31T16:45:49.514",
    "lastFail": "1970-01-01T00:00:00"
  },
  "counts": {
    "run": 1,
    "success": 1,
    "failure": 0
  },
  "time": 1
}

Renditions

Recompute Picture Views

To recompute the picture views for the documents matching a given NXQL query.

POST http://localhost:8080/nuxeo/site/management/renditions/pictures/recompute

Body Parameters

Parameter Name Type Required Description
query string No An NXQL query.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.

Sample

To recompute the picture views for the documents matching a given query:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/renditions/pictures/recompute \
-d 'query=SELECT * FROM Document WHERE ecm:mixinType = "Picture"'
{
   "entity-type": "bulkStatus",
   "commandId": "93baf453-5d34-4bb9-9370-54ec4ffe78b2",
   "state": "SCHEDULED",
   "processed": 0,
   "error": false,
   "errorCount": 0,
   "total": 0,
   "action": "recomputeViews",
   "username": "system",
   "submitted": "2019-07-26T12:10:07.567Z",
   "scrollStart": null,
   "scrollEnd": null,
   "processingStart": null,
   "processingEnd": null,
   "completed": null,
   "processingMillis": 0
}

Default Query

If no query is provided, the picture views recomputation is launched on the following default query:

SELECT * FROM Document
  WHERE ecm:mixinType = 'Picture' AND picture:views/*/title IS NULL

Recompute Thumbnails

To recompute the thumbnails of the documents matching a given NXQL query.

POST http://localhost:8080/nuxeo/site/management/renditions/thumbnails/recompute

Body Parameters

Parameter Name Type Required Description
query string No An NXQL query to select a set of documents.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.

Sample

To recompute the thumbnails for the documents matching a given query:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/renditions/thumbnails/recompute \
-d 'query=SELECT * FROM Document WHERE ecm:mixinType = "Thumbnail"'
{
   "entity-type": "bulkStatus",
   "commandId": "0e1e6800-631a-4e04-a47c-241ea7b3596a",
   "state": "SCHEDULED",
   "processed": 0,
   "error": false,
   "errorCount": 0,
   "total": 0,
   "action": "recomputeThumbnails",
   "username": "system",
   "submitted": "2019-07-26T12:13:31.361Z",
   "scrollStart": null,
   "scrollEnd": null,
   "processingStart": null,
   "processingEnd": null,
   "completed": null,
   "processingMillis": 0
}

Default Query

If no query is provided, the thumbnail recomputation is launched on the following default query:

SELECT * FROM Document
  WHERE ecm:mixinType = 'Thumbnail' AND thumb:thumbnail/data IS NULL
    AND ecm:isVersion = 0 AND ecm:isProxy = 0 AND ecm:isTrashed = 0

Running Status Endpoint

To get all the health check statuses.

GET http://localhost:8080/nuxeo/site/management/runningStatus

Response

If successful, returns a JSON representation of the health probes information.

Status Codes

  • 200 OK - Success.

Sample

curl -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/runningStatus
{
  "runtimeStatus": "ok",
  "elasticSearchStatus": "ok",
  "ldapDirectories": "ok",
  "repositoryStatus": "ok"
}

WorkManager Endpoint

To repair works in failure.
When a Nuxeo Stream work fails, it is stored in a Dead Letter Queue (DLQ). When the cause of the failure requires manual intervention (fix a misconfiguration, restart a service, fix a full disk, re-deployment, etc.) a retry policy is not enough. The failing works can be relaunched by using the endpoint as below:

POST http://localhost:8080/nuxeo/site/management/workmanager/runworksinfailure

Body Parameters

Parameter Name Type Required Description
timeoutSeconds int No The work execution timeout in seconds.

Response

If successful, returns a JSON representation of a Bulk Action Status.

Status Codes

  • 200 OK - Success.

Sample

To specify an execution timeout:

curl -X POST -u Administrator:Administrator \
http://localhost:8080/nuxeo/site/management/workmanager/runworksinfailure
-d timeoutSeconds=10
{
 "total": 0,
 "success": 0
}

We'd love to hear your thoughts!

All fields required