← Back to Skills
Browser

openkm-rest

pes0 By pes0 👁 14 views ▲ 0 votes

OpenKM Document Management via REST API

GitHub
---
name: openkm-rest
description: OpenKM Document Management via REST API (folders, documents, metadata, versioning, search, workflows)
metadata:
  openclaw:
    emoji: "📁"
    requires:
      bins: ["python"]
      env:
        - OPENKM_BASE_URL
        - OPENKM_USERNAME
        - OPENKM_PASSWORD
    primaryEnv: OPENKM_BASE_URL
user-invocable: true
disable-model-invocation: false
---

# OpenKM REST Skill

This skill provides a **local CLI** that accesses OpenKM **exclusively via REST**
(no SOAP, no CMIS).

The agent uses **shell calls** to `openkm_cli.py`.

## Environment Variables (Required)

```bash
OPENKM_BASE_URL=https://openkm.example.com   # WITHOUT /OpenKM
OPENKM_USERNAME=okm_admin
OPENKM_PASSWORD=secret
```

## Folder Operations

### List folder contents
```bash
python3 openkm_cli.py list --folder-path /okm:root
```

### Create folder structure
Creates parent folders if they don't exist:
```bash
python3 openkm_cli.py ensure-structure --parts Folder1 Subfolder
```

## Document Operations

### Upload document
```bash
python3 openkm_cli.py upload --okm-path /okm:root/Folder/file.pdf --local-path /path/file.pdf
```

### Download document
```bash
python3 openkm_cli.py download --doc-id <uuid> --local-path /path/file.pdf
```

### Move document
Move a document to another folder (using folder UUID as target):
```bash
python3 openkm_cli.py move --doc-id <doc-uuid> --target-path <folder-uuid>
```

### Rename document
```bash
python3 openkm_cli.py rename --doc-id <uuid> --new-name new_filename.pdf
```

### Delete document
```bash
python3 openkm_cli.py delete --doc-id <uuid>
```

## Metadata & Organization

### Get document properties
Shows title, description, keywords, categories, and other metadata:
```bash
python3 openkm_cli.py properties --doc-id <uuid>
```

### Set title and description
```bash
python3 openkm_cli.py set-properties --doc-id <uuid> --title "My Title" --description "My description"
```

### Add keyword
```bash
python3 openkm_cli.py add-keyword --doc-id <uuid> --keyword "Invoice"
```

### Remove keyword
```bash
python3 openkm_cli.py remove-keyword --doc-id <uuid> --keyword "Invoice"
```

### Add category
Category ID can be a UUID or path (e.g., `/okm:categories/Finance`):
```bash
python3 openkm_cli.py add-category --doc-id <uuid> --category-id <category-uuid-or-path>
```

### Remove category
```bash
python3 openkm_cli.py remove-category --doc-id <uuid> --category-id <category-uuid-or-path>
```

## Versioning

### Get version history
```bash
python3 openkm_cli.py versions --doc-id <uuid>
```

### Download specific version
```bash
python3 openkm_cli.py download-version --doc-id <uuid> --version 1.0 --local-path /path/file_v1.pdf
```

### Restore version
Restores document to a previous version:
```bash
python3 openkm_cli.py restore-version --doc-id <uuid> --version 1.0
```

## Search

### Search by content (full-text)
```bash
python3 openkm_cli.py search-content --content "invoice hosting"
```

### Search by filename
```bash
python3 openkm_cli.py search-name --name "hetzner"
```

### Search by keywords
```bash
python3 openkm_cli.py search-keywords --keywords "Invoice,Hosting"
```

### General search with filters
```bash
python3 openkm_cli.py search --content "server" --author "john.doe" --path "/okm:root"
```

## Workflows

> **Note:** Workflow features require workflows to be configured in OpenKM. 
> If workflows are not enabled, these commands will return 404.

### List available workflows
```bash
python3 openkm_cli.py workflows
python3 openkm_cli.py workflows --name "approval"
```

### Start a workflow
```bash
python3 openkm_cli.py start-workflow --workflow-uuid <workflow-uuid> --doc-id <doc-uuid>
```

### List tasks
```bash
# Tasks for a document
python3 openkm_cli.py tasks --doc-id <uuid>

# Tasks for an actor
python3 openkm_cli.py tasks --actor-id john.doe
```

### Complete a task
```bash
python3 openkm_cli.py complete-task --task-id <task-id> --transition "approve"
```

### Add comment to task
```bash
python3 openkm_cli.py comment-task --task-id <task-id> --message "Review complete"
```

### Assign task to actor
```bash
python3 openkm_cli.py assign-task --task-id <task-id> --actor-id john.doe
```

## Notes

- The API expects `Content-Type: application/xml` for POST requests with path as body
- Paths must be URL-encoded when passed as query parameters
- The `fldId`, `docId`, `dstId`, `nodeId`, `catId` parameters accept either UUIDs or paths (e.g., `/okm:root/Folder`)
- For move operations, the `target-path` should be the UUID of the destination folder
- For rename operations, provide only the new filename (not full path)
- Keywords are free-form text tags; categories are predefined in OpenKM
- Version names are typically numbers like `1.0`, `1.1`, `2.0`, etc.
- Search results include a relevance score
- Workflow features require proper workflow configuration in OpenKM

## API Reference

The skill uses the OpenKM 6.3 REST API endpoints:

**Folders:**
- `GET /folder/getChildren` - List folder contents
- `POST /folder/createSimple` - Create folder

**Documents:**
- `POST /document/createSimple` - Upload document
- `GET /document/getContent` - Download document
- `GET /document/getProperties` - Get document metadata
- `PUT /document/setProperties` - Update title/description
- `PUT /document/move` - Move document
- `PUT /document/rename` - Rename document
- `DELETE /document/delete` - Delete document

**Versioning:**
- `GET /document/getVersionHistory` - Get version history
- `PUT /document/restoreVersion` - Restore to version
- `GET /document/getContentByVersion` - Download specific version

**Properties/Metadata:**
- `POST /property/addKeyword` - Add keyword
- `DELETE /property/removeKeyword` - Remove keyword
- `POST /property/addCategory` - Add category
- `DELETE /property/removeCategory` - Remove category

**Search:**
- `GET /search/find` - General search with filters
- `GET /search/findByContent` - Full-text search
- `GET /search/findByName` - Filename search
- `GET /search/findByKeywords` - Keyword search

**Workflows:**
- `GET /workflow/getAllProcessDefinitions` - List workflows
- `GET /workflow/getAllProcessDefinitionsByName` - Find workflow by name
- `POST /workflow/runProcessDefinition` - Start workflow
- `GET /workflow/findTaskInstances` - Get tasks by document
- `GET /workflow/findTaskInstancesByActor` - Get tasks by actor
- `POST /workflow/setTaskInstanceValues` - Complete task
- `POST /workflow/addTaskInstanceComment` - Add comment
- `POST /workflow/setTaskInstanceActor` - Assign task
browser

Comments

Sign in to leave a comment

Loading comments...