DAM Wiki

Hyland Nuxeo (Nuxeo Platform) API

Hyland Software · USA (Westlake, Ohio; Nuxeo historically New York and Paris) · Founded 2000 · subsidiary of Hyland SoftwareVerified 2026-10-01 · 116 sources
  • SaaS
  • Private cloud
  • On-premise
  • Enterprise
  • REST + webdav API
  • No webhooks
  • SAML · OIDC · cas · kerberos SSO
  • MCP: Nuxeo MCP Server
Complete · 7 of 7 pages
116sources
0API specs
10-01verified 2026
Official website ↗Hyland Nuxeo alternatives →

Scope: the public APIs of the Nuxeo Platform LTS 2025 server (REST API v1, Automation, CMIS, WebDAV, Management API), whether self-hosted or on Nuxeo Cloud. Every Nuxeo deployment is its own server: there is no shared multi-tenant API host, so {host} below is the customer's Nuxeo URL. No authenticated call was made for this page.

At a glance

API styles
REST/JSON "v1" on Jakarta-RS (WebEngine), plus an RPC-style Automation API (operations and chains) S1 S10; CMIS 1.1 (Browser/JSON binding /nuxeo/json/cmis, AtomPub /nuxeo/atom/cmis), included by default S95; WebDAV (Marketplace package) S42. No GraphQL. MCP: see AI & agent ecosystem
Base URL(s)
REST: https://{host}/nuxeo/api/v1/… S1; older examples use /nuxeo/site/api/v1/… S8. Automation: https://{host}/nuxeo/api/v1/automation/{operationId} and legacy https://{host}/nuxeo/site/automation S3 S10. OAuth: https://{host}/nuxeo/oauth2/authorize, /nuxeo/oauth2/token S4. Downloads: https://{host}/nuxeo/nxfile/{repository}/{docId}/… S12. Management: https://{host}/nuxeo/api/v1/management/…, optionally on a separate port S97
Current version(s) & deprecations
REST API path version v1 (no v2) S1. The server follows LTS cycles: LTS 2025 (active to 2027-04-02, maintained to 2028-04-28), LTS 2023 (maintenance to 2027-07-18); LTS 2021 ended 2025-04-07 S19. LTS 2025 deprecations: OAuth 1.0 deprecated, Portal SSO deprecated in favour of OAuth 2 Client Credentials, NTLM login removed; a NuxeoForwardDeprecatedPathFilter keeps removed REST paths working with a log line S15 S16
Auth methods
Default REST chain: Basic, Nuxeo login token (X-Authentication-Token), JWT bearer, OAuth 2.0 bearer S2. OAuth 2 grants: authorization code (with PKCE S256/plain for public clients), refresh token, JWT bearer assertion, client credentials (since LTS 2025.3) S4 S16. Other chain plugins (SAML, OIDC, CAS, Kerberos, anonymous) serve browser login S5
Token lifetime / refresh
OAuth 2 token responses in the docs show expires_in: 3599 (≈1 h) with a refresh_token (authorization-code and JWT grants; none for client credentials) S4; whether the lifetime is configurable: Not public. Expired OAuth 2 tokens are garbage-collected weekly (cron configurable) S17. Login-token expiry: Not public
Scopes / permission model
No OAuth scopes: the scope parameter is "ignored" S4. Calls run as a Nuxeo user and are filtered by document ACLs; a client-credentials client must have a Nuxeo user with the same name as its client ID S4. Login tokens carry a permission (r/rw) chosen at creation S94 S26. The Management API is restricted to administrators, a configured technical user or configured groups S97 S16
Official spec
None published as a file. A Swagger 1.2 explorer at /nuxeo/api/v1/doc (and Automation doc at /api/v1/automation/doc) was moved out of the default distribution into an optional nuxeo-rest-api-documentation package in LTS 2025 S15; its source repo says the Swagger doc is "out-of-date and no longer maintained" and points to doc.nuxeo.com/rest-api S23. No OpenAPI 3 or Postman collection found (GitHub org searched) S30. Nothing archived on DAM Wiki
Rate limits
Not public. No request throttling is documented for the REST API S1. Nuxeo Cloud tracks "API activity" in monthly and yearly usage reports and can suspend services for unsafe usage, without published quotas S67
Pagination
Offset paging: pageSize, currentPageIndex, offset, maxResults; responses carry resultsCount, numberOfPages, isNextPageAvailable… pageSize default 0 (no paging) and max 1,000 by default (server-configurable) S7
Webhooks / events
No outbound webhook service in the REST API S3. Events are handled by server-side Java listeners or Studio event handlers; the Zapier add-on subscribes Zapier to Nuxeo notifications S58. See Events & webhooks
Official SDKs
Java (nuxeo-java-client 4.1.0), JavaScript (nuxeo npm 4.0.6), Python (nuxeo PyPI 7.1.0); PHP client "partial"; .NET client archived S1 S25 S26 S27 S28 S29
Sandbox / trial access
Self-hosted developers can run the server from the public sources S21; the LTS 2025 Docker image needs a user token for docker-private.packages.nuxeo.com S22. Self-service trials came back with "NOS Connect" (Q1 2026) S75. Nuxeo Cloud customers get a Development Sandbox environment S67. An API Playground web app runs against your own instance S96

Authentication

Basic S2 — Authorization: Basic base64(user:password); the default for API calls S1.

Nuxeo login token S94 S26

  1. Call the token servlet (/nuxeo/authentication/token, path from the official Python client) while authenticated (e.g. Basic), with applicationName, deviceId, permission (required) and deviceDescription (optional); a missing required parameter returns 400.
  2. The unique token is stored server-side, bound to user + application + device + permission.
  3. Send it as X-Authentication-Token: <token> S2. Revocation and expiry rules: Not public.

OAuth 2.0 S4

  • Clients are registered by an admin in Web UI → Administration → Cloud Services → Consumers (name, client ID, optional secret, redirect URIs, auto-grant to skip the consent page) or through the REST API (POST/api/v1/directory/oauth2Clients). Nuxeo must run on HTTPS.
  • Authorization code: GET/nuxeo/oauth2/authorize?response_type=code&client_id=…[&redirect_uri][&state][&code_challenge&code_challenge_method=S256] → user consent page (oauth2Grant.jsp) unless auto-grant → POST/nuxeo/oauth2/token?grant_type=authorization_code&client_id=…&code=…[&client_secret][&code_verifier].
  • JWT bearer: enable with nuxeo.jwt.secret in nuxeo.conf; sign an assertion with HS512 (iss, sub = Nuxeo username); POST/nuxeo/oauth2/token with grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion=….
  • Refresh: grant_type=refresh_token&client_id=…&refresh_token=….
  • Client credentials (machine-to-machine): grant_type=client_credentials&client_id=…&client_secret=…; logs in as the Nuxeo user named like the client ID S4; available since LTS 2025.3 (2025-06-02) S16 S72.
  • Use the token as Authorization: Bearer … or ?access_token=… S4.
  • OAuth 2 providers, clients and issued tokens can be managed through /api/v1/oauth2/provider|client|token S3.

JWT direct S2 S97 — Authorization: Bearer <JWT> signed with the shared nuxeo.jwt.secret; this is also how the Management API's technical user authenticates.

Browser SSO (SAML 2.0, OIDC, Keycloak, CAS, Kerberos, Shibboleth) belongs to the pluggable authentication chain, configured per server; custom plugins are possible S5.

Core resources

Paths relative to https://{host}/nuxeo/api/v1. Inventory from the REST API documentation S2 S3 S6 S7 S8 S97.

ResourceEndpointsNotes
Documents (assets, folders, collections)GET|PUT|DELETE /id/{docId}, POST/id/{parentId}; same on /path/{path}CRUD; assets are documents of type Picture, Video, Audio, File…
Children / in-folder searchGET/id/{docId}/@children, GET/path/{path}/@search?fullText=…|query=NXQLDefault pageSize 50 on these adapters
SearchGET/search/lang/NXQL/execute?query=…; GET/search/pp/{pageProvider}/execute; saved searches GET|POST /search/saved, GET|PUT|DELETE /search/saved/{id}, …/executeSee Search & querying
Bulk actionsPOST/search/lang/{lang}/bulk/{actionId}, POST/search/pp/{pp}/bulk/{actionId}, …/saved/{id}/bulk/{actionId}; status under /management/bulkBulk Action Framework, scroll-based server-side
Metadata schemaGET/config/types[/{type}], /config/schemas[/{schema}], /config/facets[/{facet}]Read-only introspection; schemas are defined in Studio/XML
VocabulariesGET/directory, GET|POST /directory/{name}, GET|PUT|DELETE /directory/{name}/{entryId}Directories = controlled vocabularies, also OAuth clients
UploadsPOST/upload/new/{handler}, POST/upload/{batchId}/{fileIdx} (whole or chunked), GET/upload/{batchId}[/info], DELETE/upload/{batchId}[/{fileIdx}], POST/upload/{batchId}[/{fileIdx}]/execute/{operationId}See Uploads & binaries
Binaries / renditionsGET/id/{docId}/@blob/{xpath}, @rendition/{name}, @convert?format=…|type=…|converter=…; /nuxeo/nxfile/… download servletPicture views and video transcodings are document properties
Rights / ACLGET/id/{docId}/@acl; ACL changes via Automation (Document.AddPermission…)Read adapter only in REST
AuditGET/id/{docId}/@auditPer-document history
Annotations & comments/id/{docId}/@annotation, @commentCRUD on annotations
Workflows & tasks/workflow/{id}, /task/{id}, /id/{docId}/@workflow, @taskStart, follow, complete
Users & groupsPOST/user, GET|PUT|DELETE /user/{id}, POST|DELETE /user/{id}/group/{groupId}; POST/group, /group/{id} (+ @users, @groups)SCIM 2.0 is a separate package S45
Automation (commands)POST/automation/{operationId}, POST/automation/Chain.{chainId}, /id/{docId}/@op/{operation} (piping)100+ operations: copy, move, permissions, conversions, video ops… S3 S10
CapabilitiesGET/capabilitiesDistribution, version, cluster info
User preferences/me/preferences/{key}
Management (admin)/management/binaries|blobs|bulk|distribution|elasticsearch|fulltext|pictures|probes|stream|thumbnails|versions|workflows|work-manager (+ migration, videos)e.g. recompute picture views or thumbnails S97

Not exposed as dedicated resources: usage rights/licences (custom schemas), brand portals, asset analytics, webhook subscriptions S3 S2.

Data model

S98 S32 unless noted.

  • Document JSON (entity-type: document): uid (UUID), repository, path, type, state (lifecycle), parentRef, isCheckedOut, isVersion, isProxy, proxyTargetId, versionableId, versionLabel, changeToken, isTrashed, title, lockOwner, lockCreated, lastModified, facets[], properties{}, contextParameters{} (filled by enrichers).
  • Properties are prefixed by schema: dc:title, dc:description, file:content, picture:views, vid:transcodedVideos, vid:storyboard… The properties header (or X-NXproperties) chooses which schemas are returned (* = all) S9.
  • DAM types: Picture (facets Picture, MultiviewPicture; schemas file, picture, image_metadata, iptc), Video (facets Video, HasStoryboard, HasVideoPreview), Audio; facets can be added to custom types S32.
  • Blobs are JSON objects (name, mime-type, length, digest, data URL to nxfile) S12 (download URL), S6 (references by upload-batch / upload-fileId).
  • Versions: separate immutable documents with major/minor labels; proxies point to a version (publication) S34 S98.
  • Taxonomy: folder tree (path), collections (link documents, max 10,000 members by default in LTS 2025 S18), tags, directory-backed vocabulary fields S3.
  • Extended fields and enrichers: headers enrichers.document: thumbnail,breadcrumb,children…, fetch.document: dc:creator,… (resolve references), depth, translate.* S9.

Search & querying

AspectBehaviour
Query languageNXQL (SELECT * FROM Document WHERE …): comparisons, LIKE/ILIKE with %/_, IN, STARTSWITH for paths, ecm:fulltext, ecm:ancestorId, ecm:isTrashed, list and complex properties, UTC dates S11
EndpointsAd-hoc query (/search/lang/NXQL/execute), server-defined page providers with positional (queryParams) or named parameters (/search/pp/{name}/execute), saved searches S7
IndexPage providers can query Elasticsearch/OpenSearch; for REST ad-hoc queries this needs elasticsearch.override.pageproviders=…,REST_API_SEARCH_ADAPTER S7
Facets / aggregatesAggregates defined on page providers are returned; header skipAggregates: true skips them S7 S9
Highlightshighlight=dc:title.fulltext,… S7
SortingsortBy (comma list), sortOrder ASC/DESC S7
Page sizepageSize default 0 (no paging) and max 1,000 by default (configurable); adapters default to 50 S7 S8
Deep paginationOffset only via REST; Unverified the doc's sample responses show maxPageSize values of 100 and 1,000, so the effective cap depends on the page provider. For full exports the vendor approach is server-side bulk actions (scroll-based) S7 S97
ConsistencyHeader nx_es_sync: true forces synchronous indexing on a write S9

Uploads & binaries

Batch upload S6

  1. POST/api/v1/upload/new/{handler} (default, or e.g. s3) → batchId. Mandatory even for one file.
  2. POST/api/v1/upload/{batchId}/{fileIdx} with Content-Type: application/octet-stream, X-File-Name, X-File-Type (and Content-Length) → 201.
  3. Chunked / resumable: same URL with X-Upload-Type: chunked, X-Upload-Chunk-Index (from 0), X-Upload-Chunk-Count, X-File-Size; 202 until all chunks arrive, then 201; GET…/{fileIdx} lists uploadedChunkIds to resume.
  4. Attach the file: reference {"upload-batch": batchId, "upload-fileId": "0"} in a document property (file:content) on create/update, or run an operation on the batch (POST/upload/{batchId}/execute/{operationId}, e.g. FileManager.Import). The batch is dropped after execution unless X-Batch-No-Drop: true.
  • Chunks are kept in temporary storage until the batch is executed or dropped. Chunk size limit: Not public.

S3 direct upload S13 — with nuxeo.s3storage.useDirectUpload=true, the client gets temporary credentials for a transient bucket, uploads there, and Nuxeo moves the object to the final bucket (Web UI add-on uses this by default when installed).

Downloads S12 S13

  • https://{host}/nuxeo/nxfile/{repo}/{docId}[/{xpath or blobholder:N}][/{filename}][?inline=true], e.g. …/file:content, …/files:files/0/file/name.png.
  • Picture views and video conversions are blobs inside picture:views / vid:transcodedVideos; REST @rendition/{name} returns named renditions and @convert converts on the fly S8 S32.
  • With S3 direct download, Nuxeo redirects to presigned S3 URLs (nuxeo.s3storage.directdownload.expire, default 3,600 s) S13.
  • On-the-fly crop/resize/format: optional Dynamic Asset Transformation package (unsupported) S44.

Events & webhooks

  • No webhook subscription API. The documented REST endpoints contain no webhook or callback resource S3 S2.
  • Server-side events: Nuxeo raises core events (e.g. updatePictureview and videoChanged from the DAM listeners, enrichmentMetadataCreated and similarDocumentsFound from Nuxeo AI) consumed by synchronous or asynchronous listeners; an integrator can make a listener or a Studio-built Automation chain call an external HTTP service S32 S38 Unverified (custom development, not a product feature).
  • Nuxeo Stream / Kafka: asynchronous processing (AI pipelines, bulk actions) runs on Nuxeo Stream, which can be backed by Kafka S38 S15; streams can be inspected through the Management API, but no contract for external consumers is documented S97.
  • Zapier add-on: lets a Zapier account authenticate with OAuth 2 and subscribe to Nuxeo notifications (default and custom), and run Automation operations; it requires the deprecated JSF UI add-on S58 Unverified (likely legacy).
  • Payload format, signing, retries: N/A (no native webhooks).

Limits & quirks

  • No API throttling documented: capacity is a sizing question on self-hosted and a contract question on Nuxeo Cloud (usage reports include API activity) S1 S67.
  • Scopes ignored: OAuth 2 tokens grant the full rights of the mapped user S4.
  • Client credentials require a mirror user named after the client ID S4.
  • Two Automation URLs (/nuxeo/site/automation and /nuxeo/api/v1/automation) and two REST prefixes (/nuxeo/api/v1 and /nuxeo/site/api/v1) appear in the docs S10 S8.
  • Docs vs reality: the authentication overview still lists NTLM and Portal SSO, but LTS 2025 removed NTLM login and deprecated Portal SSO S5 S15 S16 Unverified (doc lag).
  • Removed endpoints still answer through a forwarding filter (nuxeo.forward.deprecated.path.enabled) but should be migrated S15.
  • Collection cap of 10,000 documents (LTS 2025; 100,000 in LTS 2023), changed in 2025.6 S18.
  • Version-specific behaviour: every customer runs its own LTS and hotfix level; check GET/api/v1/capabilities (distributionVersion) before relying on a feature S3.
  • Transaction timeout per call: Nuxeo-Transaction-Timeout header (seconds) S9.
  • Swagger explorer may be missing on LTS 2025 servers (optional package) and is unmaintained S15 S23.

SDKs, tools & code samples

LibraryLanguageMaintainerStatus
nuxeo-java-clientJava (Retrofit/OkHttp)Nuxeo/HylandTag release-4.1.0 (2026-06-01); "supported by Nuxeo", LTS 2021 and higher; last push 2026-10-01 S27
nuxeo (npm) / nuxeo-js-clientJavaScript (Node + browser)Nuxeo/Hyland4.0.6 (2026-01-30), Apache-2.0; compatible with LTS 2015+ S25
nuxeo (PyPI) / nuxeo-python-clientPythonNuxeo/Hyland7.1.0 (2026-06-22), Apache; REST + Automation; Python 3.13.1+ per docs S26
nuxeo-php-clientPHPNuxeo3.0.0 on Packagist (2022-04-29), Apache-2.0; described as "partial implementation" S29 S1
nuxeo-dotnet-client.NETNuxeoArchived (last push 2022-06-22), LGPL-2.1 S28
iOS client, Dart clientSwift/ObjC, DartNuxeo / communityListed in docs; maintenance Unknown S1
Nuxeo API PlaygroundWeb appNuxeoExplore endpoints against your own instance; also a Marketplace package for LTS 2025 S96 S42
nuxeo-mcp-serverPython (FastMCP)nuxeo GitHub orgv0.1.0, created 2026-03-05; see Integrations S24
nuxeo-cli, Nuxeo Studio, Nuxeo ExplorerToolingNuxeoCode generator (CLI), low-code configuration, browsable reference of components/operations per distribution S30 S102 S89
nuxeo-sandbox GitHub orgSamplesNuxeo field teamsUnsupported samples (e.g. dynamic asset transformation, public download link) S44 S50

Changelog of the API

DateChangeSource
2026-09-14LTS 2025.25: cache for the token authentication service, guard against OAuth 2 provider creation without authorization server URL S14
2026-03-05nuxeo-mcp-server repository created (MCP tools over REST/Automation) S24
2025-08-11LTS 2025.6: collection size capped (10,000 by default) S18
2025-06-02LTS 2025.3: OAuth 2.0 Client Credentials flow; Portal SSO deprecated S16
2025-04-21LTS 2025.1: weekly garbage collection of expired OAuth 2 tokens; user creation without password configurable S17
2025-03-31LTS 2025.0: OAuth 1.0 deprecated; NTLM removed; Swagger REST/Automation doc moved to an optional package; forwarding filter for removed REST paths; SCIM 2.0 package; Management API for UID sequencer S15
2023-07-18LTS 2023 released S19
2021-01-21LTS 2021 released (DAM built into the platform) S19 S32
2008First REST API (with native SQL storage) S62

Stored API specs

No public machine-readable spec stored
Search the wiki