Skip to content
Hoody.com

The WebDAV operations expose RFC 4918-compliant file management endpoints for accessing, copying, moving, locking, and inspecting properties on container files. Use these endpoints when integrating with WebDAV-aware clients such as Nextcloud, ownCloud, Cyberduck, macOS Finder, and Windows Explorer.

All endpoints operate on paths relative to the container’s workspace. Authentication uses a container-scoped token. LOCK and UNLOCK are compatibility stubs — the server does not enforce locking semantics, but responds with valid tokens so WebDAV clients can complete their workflows.

Connect to a remote WebDAV server (Nextcloud, ownCloud, etc.) through this container. Returns the file content or a directory listing proxied from the upstream endpoint. Use this endpoint to provide WebDAV access when clients cannot reach the upstream server directly.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container
typequerystringYesMust be webdav
serverquerystringYesTarget WebDAV server hostname
userquerystringNoUsername for WebDAV authentication
passquerystringNoPassword for WebDAV authentication
webdav_pathquerystringNoWebDAV endpoint path. Default: "/"
Terminal window
curl -X GET "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/remote.php/webdav/Documents?type=webdav&server=cloud.example.com&user=alice&pass=$WEBDAV_PASS&webdav_path=/"

File content or directory listing returned from the upstream WebDAV server.

{
"description": "File content or directory listing"
}

Returns supported HTTP methods and WebDAV capabilities in the Allow header. WebDAV clients call this endpoint first to discover which verbs they can use.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container
Terminal window
curl -X OPTIONS "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/report.pdf" \
-i

Capability discovery per RFC 4918 §10.1. No response body. The advertised methods and DAV class are returned in response headers:

  • Allow — comma-separated list of supported HTTP methods. WebDAV-root paths advertise the full WebDAV verb set; /api/v1/* paths advertise the simple HTTP set.
  • DAV — WebDAV compliance class. Set to 1 on WebDAV-root OPTIONS responses; absent on /api/v1/* OPTIONS responses.
  • MS-Author-Via — authoring-protocol hint for Microsoft WebDAV clients. Set to DAV on WebDAV-root OPTIONS responses.

WebDAV COPY: copy a file or directory to a new location specified by the Destination header. Use Depth: 0 to copy a single file, or Depth: infinity to recursively copy a directory.

NameInTypeRequiredDescription
pathpathstringYesSource file or directory path
DestinationheaderstringYesDestination URL for the copy
DepthheaderstringNoCopy depth. Allowed values: 0 (file only) or infinity (recursive for directories). Default: "infinity"
Terminal window
curl -X COPY "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/report.pdf" \
-H "Destination: https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Archive/report.pdf" \
-H "Depth: 0"

Resource copied successfully.

WebDAV MOVE: move or rename a file or directory to a new location specified by the Destination header. The caller must hold both upload and delete permissions on the source and destination.

NameInTypeRequiredDescription
pathpathstringYesSource file or directory path
DestinationheaderstringYesDestination URL for the move
Terminal window
curl -X MOVE "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/draft.txt" \
-H "Destination: https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/final.txt"

Resource moved successfully.

WebDAV LOCK: returns a lock token for WebDAV client compatibility. This is a compatibility stub — locks are not enforced server-side.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container
DepthheaderstringNoAllowed values: 0 or infinity

The optional request body is a WebDAV lock XML document describing the requested lock scope, type, and owner. Omit the body to request a default exclusive write lock.

Terminal window
curl -X LOCK "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/report.pdf" \
-H "Depth: infinity" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<D:lockinfo xmlns:D="DAV:">
<D:lockscope><D:exclusive/></D:lockscope>
<D:locktype><D:write/></D:locktype>
<D:owner><D:href>mailto:alice@example.com</D:href></D:owner>
</D:lockinfo>'

Lock token issued for compatibility. The response body is a WebDAV XML prop document containing a lockdiscovery element with the issued token.

<?xml version="1.0" encoding="utf-8"?>
<D:prop xmlns:D="DAV:">
<D:lockdiscovery>
<D:activelock>
<D:locktype><D:write/></D:locktype>
<D:lockscope><D:exclusive/></D:lockscope>
<D:depth>infinity</D:depth>
<D:timeout>Second-3600</D:timeout>
<D:locktoken>
<D:href>urn:uuid:e71d3c20-3e3f-11ec-8d3d-0242ac130004</D:href>
</D:locktoken>
</D:activelock>
</D:lockdiscovery>
</D:prop>

WebDAV UNLOCK: release a previously issued lock token. This is a no-op compatibility stub — the server does not track lock state.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container
Lock-TokenheaderstringYesLock token to release
Terminal window
curl -X UNLOCK "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/report.pdf" \
-H "Lock-Token: <urn:uuid:e71d3c20-3e3f-11ec-8d3d-0242ac130004>"

Lock released (no-op).

WebDAV PROPFIND: retrieve properties (metadata) for files or directories. Returns a 207 Multi-Status response containing resource type, size, modification date, ETag, and other properties in WebDAV XML format. Use the Depth header to control recursion into directories.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container
DepthheaderstringNoDepth of property retrieval. Allowed values: 0 (resource only), 1 (immediate children), infinity (recursive). Default: "1"

The optional request body is a PROPFIND XML document specifying which properties to retrieve. Omit the body to retrieve the standard set of properties.

Terminal window
curl -X PROPFIND "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents" \
-H "Depth: 1" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<D:propfind xmlns:D="DAV:">
<D:prop>
<D:resourcetype/>
<D:getcontentlength/>
<D:getlastmodified/>
<D:getetag/>
</D:prop>
</D:propfind>'

Multi-Status response with resource properties in WebDAV XML format.

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/Documents</D:href>
<D:propstat>
<D:prop>
<D:resourcetype><D:collection/></D:resourcetype>
<D:getcontentlength>0</D:getcontentlength>
<D:getlastmodified>Mon, 01 Jan 2024 12:00:00 GMT</D:getlastmodified>
<D:creationdate>2024-01-01T12:00:00Z</D:creationdate>
<D:getetag>"d41d8cd98f00b204e9800998ecf8427e"</D:getetag>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
<D:response>
<D:href>/Documents/report.pdf</D:href>
<D:propstat>
<D:prop>
<D:resourcetype/>
<D:getcontentlength>1048576</D:getcontentlength>
<D:getlastmodified>Fri, 12 Jan 2024 09:30:00 GMT</D:getlastmodified>
<D:creationdate>2024-01-12T09:30:00Z</D:creationdate>
<D:getetag>"a1b2c3d4e5f67890"</D:getetag>
<D:getcontenttype>application/pdf</D:getcontenttype>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>

WebDAV PROPPATCH: modify dead properties on a file or directory. Returns a 207 Multi-Status response confirming the property changes.

NameInTypeRequiredDescription
pathpathstringYesResource path inside the container

The request body is a PROPPATCH XML document with set and/or remove instructions for the target properties.

Terminal window
curl -X PROPPATCH "https://{projectId}-{containerId}-files-1.{server}.containers.hoody.com/api/files/webdav/Documents/report.pdf" \
-H "Content-Type: application/xml" \
-d '<?xml version="1.0" encoding="utf-8"?>
<D:propertyupdate xmlns:D="DAV:">
<D:set>
<D:prop>
<D:displayname>Annual Report 2024</D:displayname>
</D:prop>
</D:set>
</D:propertyupdate>'

Multi-Status response confirming property changes.

<?xml version="1.0" encoding="utf-8"?>
<D:multistatus xmlns:D="DAV:">
<D:response>
<D:href>/Documents/report.pdf</D:href>
<D:propstat>
<D:prop>
<D:displayname>Annual Report 2024</D:displayname>
</D:prop>
<D:status>HTTP/1.1 200 OK</D:status>
</D:propstat>
</D:response>
</D:multistatus>