openapi: 3.1.0
info:
title: oCIS WebDAV API
description: |
The oCIS WebDAV API provides Web Distributed Authoring and Versioning (WebDAV) functionality for file and folder
management, metadata operations, and resource locking. WebDAV extends HTTP/1.1 with additional methods, headers,
and content-types for comprehensive resource management.
This API is one of the central interfaces that ownCloud clients use for handling file resources, metadata, and locks.
It supports the full WebDAV specification (RFC 4918) with ownCloud-specific extensions.
**Key Features:**
- File and folder operations (create, read, update, delete)
- Property management and metadata operations
- Resource locking and collision avoidance
- Directory listings and resource discovery
- Resumable uploads via TUS protocol integration
- ownCloud-specific properties and extensions
**WebDAV Methods:**
This API uses standard HTTP methods where possible, and documents WebDAV-specific methods
using POST with method override headers for compatibility with OpenAPI tooling.
version: 1.0.0
contact:
name: ownCloud
url: https://github.com/owncloud/ocis
license:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://your-ocis-instance.com
description: oCIS instance
security:
- BearerAuth: []
- BasicAuth: []
paths:
/dav/spaces/{resourceId}:
parameters:
- $ref: '#/components/parameters/ResourceId'
get:
summary: Download Resource
description: |
Downloads a file or retrieves information about a folder. This is the standard HTTP GET method
applied to WebDAV resources. For files, it returns the file content with appropriate headers.
For folders, it may return an HTML representation or redirect to a PROPFIND operation.
operationId: downloadResource
tags:
- Resource Operations
parameters:
- $ref: '#/components/parameters/PathParam'
- name: Range
in: header
description: Request specific byte ranges of the file
schema:
type: string
example: "bytes=0-1023"
responses:
'200':
description: Resource content retrieved successfully
headers:
Content-Type:
schema:
type: string
description: MIME type of the resource
Content-Length:
schema:
type: integer
description: Size of the resource in bytes
ETag:
schema:
type: string
description: Entity tag for the resource
content:
'*/*':
schema:
type: string
format: binary
'404':
$ref: '#/components/responses/NotFound'
put:
summary: Upload/Update Resource
description: |
Creates a new file or completely replaces the content of an existing file. This is the primary method
for uploading files to the WebDAV server. The entire file content must be provided in the request body.
operationId: uploadResource
tags:
- Resource Operations
parameters:
- $ref: '#/components/parameters/PathParam'
- name: X-OC-Mtime
in: header
description: Custom modification time (Unix timestamp)
schema:
type: integer
example: 1692369418
requestBody:
required: true
content:
'*/*':
schema:
type: string
format: binary
responses:
'201':
description: File created successfully
'204':
description: File updated successfully
delete:
summary: Delete Resource
description: |
Permanently deletes a file or folder from the WebDAV server. For folders, this operation
recursively deletes all contained files and subfolders.
operationId: deleteResource
tags:
- Resource Operations
parameters:
- $ref: '#/components/parameters/PathParam'
responses:
'204':
description: Resource deleted successfully
'404':
$ref: '#/components/responses/NotFound'
/dav/spaces/{resourceId}/{path}:
parameters:
- $ref: '#/components/parameters/ResourceId'
- $ref: '#/components/parameters/PathParam'
post:
summary: WebDAV Operations (PROPFIND, PROPPATCH, MKCOL, etc.)
description: |
This endpoint handles various WebDAV methods using POST with method override headers.
The specific WebDAV method is indicated by the X-HTTP-Method-Override header.
**Supported WebDAV Methods:**
- **PROPFIND**: Retrieve properties and metadata from resources
- **PROPPATCH**: Update properties on resources
- **MKCOL**: Create collections (directories)
- **COPY**: Copy resources to new locations
- **MOVE**: Move resources to new locations
- **LOCK**: Create locks on resources
- **UNLOCK**: Remove locks from resources
operationId: webdavOperation
tags:
- WebDAV Operations
parameters:
- name: X-HTTP-Method-Override
in: header
required: true
description: The WebDAV method to execute
schema:
type: string
enum: ['PROPFIND', 'PROPPATCH', 'MKCOL', 'COPY', 'MOVE', 'LOCK', 'UNLOCK']
- name: Depth
in: header
description: Depth for operations that support it (PROPFIND, COPY, LOCK)
schema:
type: string
enum: ['0', '1', 'infinity']
- name: Destination
in: header
description: Destination URI for COPY and MOVE operations
schema:
type: string
format: uri
- name: Overwrite
in: header
description: Whether to overwrite existing destination (COPY, MOVE)
schema:
type: string
enum: ['T', 'F']
- name: Lock-Token
in: header
description: Lock token for UNLOCK operations
schema:
type: string
- name: Timeout
in: header
description: Lock timeout for LOCK operations
schema:
type: string
example: "Second-3600"
requestBody:
description: Request body varies by WebDAV method
content:
application/xml:
schema:
oneOf:
- $ref: '#/components/schemas/PropfindRequest'
- $ref: '#/components/schemas/ProppatchRequest'
- $ref: '#/components/schemas/LockRequest'
examples:
propfind:
summary: PROPFIND request
value: |
proppatch:
summary: PROPPATCH request
value: |
1
lock:
summary: LOCK request
value: |
John Doe
responses:
'200':
description: Operation successful (LOCK)
content:
application/xml:
schema:
$ref: '#/components/schemas/LockResponse'
'201':
description: Resource created (MKCOL, COPY, MOVE)
'204':
description: Operation successful (PROPPATCH, UNLOCK, MOVE, COPY)
'207':
description: Multi-status response (PROPFIND, partial operations)
content:
application/xml:
schema:
$ref: '#/components/schemas/MultistatusResponse'
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'409':
$ref: '#/components/responses/Conflict'
'423':
description: Resource is locked
content:
application/xml:
schema:
$ref: '#/components/schemas/DAVError'
patch:
summary: Upload File Chunk (TUS Protocol)
description: |
Uploads a chunk of data to an existing upload session. This is the core operation of the TUS
resumable upload protocol, allowing files to be uploaded in multiple chunks that can be
resumed if interrupted.
operationId: uploadFileChunk
tags:
- Upload Operations
parameters:
- name: Tus-Resumable
in: header
required: true
description: TUS protocol version
schema:
type: string
example: "1.0.0"
- name: Upload-Offset
in: header
required: true
description: Byte offset where this chunk should be written
schema:
type: integer
example: 0
- name: Content-Type
in: header
required: true
description: Must be application/offset+octet-stream
schema:
type: string
const: "application/offset+octet-stream"
requestBody:
required: true
content:
application/offset+octet-stream:
schema:
type: string
format: binary
responses:
'204':
description: Chunk uploaded successfully
headers:
Upload-Offset:
schema:
type: integer
description: Current upload offset after this chunk
'400':
$ref: '#/components/responses/BadRequest'
'404':
$ref: '#/components/responses/NotFound'
/dav/spaces/{resourceId}/{path}/upload:
parameters:
- $ref: '#/components/parameters/ResourceId'
- $ref: '#/components/parameters/PathParam'
post:
summary: Create Upload Session (TUS Protocol)
description: |
Creates a new resumable upload session using the TUS protocol. This endpoint is used to initiate
large file uploads that can be resumed if interrupted.
operationId: createUploadSession
tags:
- Upload Operations
parameters:
- name: Tus-Resumable
in: header
required: true
description: TUS protocol version
schema:
type: string
example: "1.0.0"
- name: Upload-Length
in: header
required: true
description: Total size of the file to be uploaded
schema:
type: integer
example: 1048576
- name: Upload-Metadata
in: header
description: Base64-encoded metadata key-value pairs
schema:
type: string
example: "filename dGVzdC50eHQ="
responses:
'201':
description: Upload session created successfully
headers:
Location:
schema:
type: string
format: uri
description: URL for upload operations
Tus-Resumable:
schema:
type: string
description: TUS protocol version
'400':
$ref: '#/components/responses/BadRequest'
'403':
$ref: '#/components/responses/Forbidden'
components:
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: Bearer token authentication using JWT tokens
BasicAuth:
type: http
scheme: basic
description: Basic authentication (for development only)
parameters:
ResourceId:
name: resourceId
in: path
required: true
description: Unique identifier of the WebDAV resource/space
schema:
type: string
example: "storage-users-1$some-admin-user-id-0000-000000000000"
PathParam:
name: path
in: path
required: false
description: Relative path within the resource
schema:
type: string
example: "Documents/example.txt"
style: simple
explode: false
responses:
BadRequest:
description: Bad request - malformed request or invalid parameters
content:
application/xml:
schema:
$ref: '#/components/schemas/DAVError'
Forbidden:
description: Forbidden - insufficient permissions
content:
application/xml:
schema:
$ref: '#/components/schemas/DAVError'
NotFound:
description: Not found - resource does not exist
content:
application/xml:
schema:
$ref: '#/components/schemas/DAVError'
Conflict:
description: Conflict - request conflicts with current resource state
content:
application/xml:
schema:
$ref: '#/components/schemas/DAVError'
schemas:
PropfindRequest:
type: object
description: PROPFIND request body for property discovery
xml:
name: propfind
namespace: "DAV:"
ProppatchRequest:
type: object
description: PROPPATCH request body for property updates
xml:
name: propertyupdate
namespace: "DAV:"
LockRequest:
type: object
description: LOCK request body for resource locking
xml:
name: lockinfo
namespace: "DAV:"
LockResponse:
type: object
description: LOCK response body with lock information
xml:
name: prop
namespace: "DAV:"
MultistatusResponse:
type: object
description: Multi-status response for operations affecting multiple resources
xml:
name: multistatus
namespace: "DAV:"
DAVError:
type: object
description: WebDAV error response
xml:
name: error
namespace: "DAV:"
properties:
exception:
type: string
description: Exception class name
message:
type: string
description: Human-readable error message
tags:
- name: Resource Operations
description: Basic file and folder operations (GET, PUT, DELETE)
- name: WebDAV Operations
description: WebDAV-specific operations (PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK)
- name: Upload Operations
description: Resumable file upload operations (TUS protocol)
externalDocs:
description: WebDAV RFC 4918
url: https://datatracker.ietf.org/doc/html/rfc4918