Open link in a new tab

Content

Expand project menu

Wiki REST API plugin for OpenProject (openproject_wiki_api)

Hi everyone,

I'd like to share a plugin I've built: openproject_wiki_api — a REST API for OpenProject wiki pages.

The stock API v3 covers work packages extensively, but wiki pages have no public REST endpoints. This plugin fills the gap: it exposes wiki pages under /api/v3/wiki_api so external tools and AI agents can work with project wikis programmatically — using a plain API token and the standard wiki permissions.

What it does

  • List wiki pages of a project (paginated, ordered by title)
  • Read a page by ID or by slug/permalink
  • Create pages — including child pages under an existing page
  • Update title, content and parent, with optimistic locking (lock_version, stale values get 409)
  • Page history — journal entries per version, plus an HTML diff between any two versions
  • Attachments — list with download URLs
  • Health endpoint for deployment smoke checks

Everything respects the standard permissions: view_wiki_pages for reads, edit_wiki_pages for writes. A token only sees what its user can see in the web UI — so it's safe to hand API keys to external assistants with narrow project roles.

Example

# list pages
curl -u apikey:<TOKEN> https://<host>/api/v3/wiki_api/projects/my-project/wiki_pages

# create a child page
curl -u apikey:<TOKEN> -X POST -H "Content-Type: application/json" \
  -d '{"title":"Meeting notes","text":"# Notes","parent_id":15}' \
  https://<host>/api/v3/wiki_api/projects/my-project/wiki_pages

Compatibility

  • OpenProject 17.x (tested on 17.6 and 17.9)

Installation

Standard plugin install: copy to modules/openproject_wiki_api, add
gem 'openproject_wiki_api', path: 'modules/openproject_wiki_api' to Gemfile.modules, bundle install, restart.
Docker installs need a textual (not regenerated) Gemfile.lock update — details in the repo docs.

The plugin is GPL-3.0, just like OpenProject itself. Issues and PRs are welcome — and if the plugin saves you time, there's a donation link in the README. 🙂

Hope it's useful for integrations, automation and AI-assisted workflows. Feedback appreciated!