File: README.md
WeKan ยฎ - Open Source kanban
Downloads
Screenshot
About WeKan ยฎ
WeKan ยฎ is a FLOSS collaborative kanban board application with MIT license.
Whether youโre maintaining a personal todo list, planning your holidays with some friends,
or working in a team on your next revolutionary idea, Kanban boards are an unbeatable tool
to keep your things organized. They give you a visual overview of the current state of your project,
and make you productive by allowing you to focus on the few items that matter the most.
Since WeKan ยฎ is a free software, you donโt have to trust us with your data and can
install Wekan on your own computer or server. In fact we encourage you to do
that by providing one-click installation on various platforms.
- WeKan ยฎ is used in most countries of the world.
- WeKan ยฎ largest user has 30k users using WeKan ยฎ in their company.
- WeKan ยฎ has been translated to 234 languages,
167 of them essentially complete. - Features:
- Real-time user interface
- All Boards page, Drag drop reorder with one or Multi-Selection:
- Board icons at Remaining, (Sub)Workspaces, Archive
- Shared Templates: Boards, Lists, Cards
- Add Board / Import:
- WeKan JSON/.zip, CSV/TSV, Excel, Markdown, Leo, todo.txt
- Trello, Jira, Trello, Asana, Zenkit, Focalboard
- Kanboard, Nextcloud Deck, OpenProject, Taskwarrior
- GitHub, GitLab, Gitea, Forgejo
- Change Color: Board theme and background image, Swimlane, List, Card
- Overrides: 1 Admin Panel, 2 Board Settings, 3 Member Settings
- Drag drop reorder with one or Multi-Selection:
- Board icons to Workspaces at All Boards page
- Swimlane, List, Minicard
- Board
- Top header: Mobile/Desktop view, Show/Hide Drag Handles, Starred Boards Bookmarks, Sort Boards, Filter, Search, Notifications, Member Settings
- Member Settings:
- Show My Dependencies, Show Board Dependencies, Import/Export JSON/SVG
- Dependencies are for SAFe PI Plannings, drawing colored lines between cards, like Kendis or Scaled Agile Framework. Import Export as JSON and SVG.
- My Cards, Due Cards, My Attachments, Search All Boards, Date Settings,
Change color - override theme, Nofications Settings (Tray, Email, etc),
Font change and Font size change, Change Avatar,
Change Language (250+ languages) - Change Settings: Show desktop drag handles, Submit editors with Enter,
Open many cards at once, Play a sound when a checklist item is completed,
Show cards count if list contains more than ... cards,
Show rescue dialoque before closing for unsaved card descriptions
- Show My Dependencies, Show Board Dependencies, Import/Export JSON/SVG
- Board Views:
- Swimlanes, Lists
- Minicard: At list there is card, that has not been not opened yet
- Card: Opened card popup of minicard
- Attachments viewer for PDF and Office documents
- Drag drop reorder one or Multi-Selection: Swimlanes, Lists, Minicards, Checklists, Checklist Items
- Collapse/Uncollapse: Menus, Swimlanes, Lists, Cards
- Table, Calendar, Multi Board Calendar, Time, Timeline
- Statistics, Group by Assignee
- Gantt, Frappe Gantt, DHTMLX Gantt
- Scrum: Product Backlog, Sprints, Sprint Report, Velocity, Roadmap, Dashboard, Bigboard
- Burndown, Burnup, Cumulative Flow, Control, Cycle Time, Flow Efficiency,
Lead Time, Throughtput Histogram, WIP Run, Pulse, Aging WIP,
Blocker Analysis, Monte Carlo Forecasts, Process Behavior (XmR),
Work Item Size vs Cycle Time, Map - Right Sidebar / Board Settings:
- Rules: like IFTTT like Trello Butler
- Lists view for Rules
- Workflow view: like Jira Workflows
- Blocks: like Scratch or Jira AutoBlocks, shows same IFTTT Rules
- Import / Export IFTTT Rules
- Export board :
- Select what to include: Card details, Board, Activities, Labels, People (Creator, Owner, Members, Assignees), Board Info (Board, List, Swimlane), Dates (Created, Received, Start, Due, End), Description, Custom Fields, Checklists, Subtasks, Comments, Attachments, Votin, Plannin Poker, Stickers, Location (link to map based on coordinates), Dependencies, Sort, Scrum Settings
- Export to: PDF, Excel, HTML, Calendar feed (iCal), Dependencies JSON/SVG,
CSV , ; TSV, JSON with/without attachmeents, .zip (Attachments),
Kanboard, Markdown, Leo, todo.txt, Taskwarrior, Focalboard,
Trello, Jira, NextCloud Deck, OpenProject, GitHub, GitLab,
Gitea, Forgejo, Asana, Zenkit - Scrum Settings
- Change color theme, Change Background Image, Date settings
- Settings:
- Board View: Show/Hide and drag drop reorder what is shown atat Public Board and Private Board
- Swimlane: Scrum settings, Lock resize swimlane height, WIP Limit Groups
- Board View: Show/Hide and drag drop reorder what is shown at Minicard and Card
- Admin Panel
- Settings
- Version
- Visibility: What is shown/hidden, Whitelabeling
- Announcement
- Accessibility
- Translation: Add custom translation strings
- PWA
- Global Webhooks
- Settings
- People
- Email, Notifications, Domains, Organizations, Teams, People
- Locked Users, Roles, Shared Templates
- Login, SAML, LDAP, OAuth2 login providers, Passwordless login
- Attachments
- Scheduled Backups, Continuous realtime backups, Move Attachments, Default Save Storage, Limits
- Storage: MongoDB GridFS, Filesystem, S3/MinIO, Azure Blob, Google Cloud
- Database migration
- Problems
- Summary
- Security
- Delete: Optional enable permanent delete.
- History Undo/Redo available at Board, List, Card, etc menus at Swimlanes and List views
- Notifications
- Reports
- Security: shows any attempted attacks based on names from https://wekan.fi/hall-of-fame/ like built-in SIEM with country flag and city based of location of IP address based on location headers like CloudFlare etc
- Impersonation
- Performance, Speed, Tests, CPU usage, Instrumentation, Broken Cards, Files, Rules, Boards, Recovery, Offices, API, Database problems, Filesystem integrity
- Platforms:
Docker Containers
image: ghcr.io/wekan/wekan:latestimage: wekanteam/wekan:latestimage: quay.io/wekan/wekan:latestdocker-compose.yml at https://github.com/wekan/wekan/blob/main/docker-compose.yml
Standards
- WeKan and Standard for Public Code assessment was made at 2023-11. At 2026 WeKan becameร full FLOSS with FerretDB v1 Fork, also see 2026 talk WeKan 10 years at https://wekan.fi/docs for more details.
Currently Wekan meets 9 out of 16 criteria out of the box.
Some others could be met with small changes.
Code stats
Translate WeKan ยฎ at Transifex
Translations to non-English languages are accepted only at Transifex using webbrowser.
New English strings of new features can be added as PRs to master branch file wekan/imports/i18n/data/en.i18n.json .
WeKan ยฎ feature requests and bugs
Please add most of your questions as GitHub issue: WeKan ยฎ Feature Requests and Bugs.
It's better than at chat where details get lost when chat scrolls up.
Discussions
FAQ
NOTE:
- Please read the FAQ first
- Please don't feed the trolls and spammers that are mentioned in the FAQ :)
Requirements
- 1 GB RAM minimum free for WeKan ยฎ. Production server should have minimum total 4 GB RAM.
For thousands of users, for example with Docker: 3 frontend servers,
each having 2 CPU and 2 wekan-app containers. One backend wekan-db server with many CPUs. - Enough disk space and alerts about low disk space. If you run out of disk space, MongoDB database gets corrupted.
- SECURITY: Updating to newest WeKan ยฎ version very often. Please check you do not have automatic updates of Sandstorm or Snap turned off.
Old versions have security issues because of old versions Node.js etc. Only newest WeKan ยฎ is supported.
WeKan ยฎ on Sandstorm is not usually affected by any Standalone WeKan ยฎ (Snap/Docker/Source) security issues. - Reporting all new bugs immediately.
New features and fixes are added to WeKan ยฎ many times a day. - Backups of WeKan ยฎ database once a day minimum.
Bugs, updates, users deleting list or card, harddrive full, harddrive crash etc can eat your data. There is no undo yet.
Some bugs can cause WeKan ยฎ board to not load at all, requiring manual fixing of database content.
Roadmap and Demo
Roadmap - Public read-only board at WeKan ยฎ demo.
- There are many companies and individuals contributing code to WeKan ยฎ, to add features and bugfixes
many times a day. - Please add Add new Feature Requests and Bug Reports immediately.
- Commercial Support.
We also welcome sponsors for features and bugfixes.
By working directly with WeKan ยฎ you get the benefit of active maintenance and new features added by growing WeKan ยฎ developer community.
Getting Started with Development
The main branch uses Meteor 3.x with Node.js 26.x.
See CHANGELOG.md for the latest runtime updates.
To contribute, create a fork and run ./build.sh (or ./build.bat on Windows) as detailed here. Once you're ready, please test your code and submit a pull request (PR).
Please refer to the developer documentation for more information.
First-Time Setup for Development
Prerequisites
Before building WeKan from source, ensure you have:
- Git - for cloning the repository
- Node.js 26.x - WeKan requires Node.js 26.x
- Meteor - the JavaScript framework WeKan is built with
Building WeKan
The build.sh script shows a two-level menu. The top level groups options into categories:
1) Setup 2) Dev server 3) Tests 4) Docker 5) Tools 6) QuitYou pick a category number, then the item number inside it (each submenu also has a Back entry). Building from source is a three-stage process:
- Setup -> Install dependencies - Downloads all required Meteor packages and npm modules
- Setup -> Build WeKan - Compiles the application
- Dev server -> localhost:3000 - Starts the development server at http://localhost:3000
# Clone your fork
git clone [email protected]:YOUR_USERNAME/wekan.git
cd wekan
# Make the script executable
chmod +x build.sh
# Step 1: Install dependencies (Setup -> Install dependencies)
./build.sh
# Press 1 (Setup) and Enter, then 1 (Install dependencies) and Enter
# Step 2: Build WeKan (Setup -> Build WeKan, after dependencies complete)
./build.sh
# Press 1 (Setup) and Enter, then 2 (Build WeKan) and Enter
# Step 3: Run WeKan in development mode (Dev server -> localhost:3000)
./build.sh
# Press 2 (Dev server) and Enter, then 1 (localhost:3000) and EnterIf a dev server is already running on that port, the Dev server options stop it automatically and start a fresh server on the same port.
WSL Users
WSL users can use Snap. See install docs.
License
WeKan ยฎ is released under the very permissive MIT license, and made
with Meteor.
File: docs/API/New-card-with-Python3-and-REST-API.md
Wekan provides a python script to ease the call of the REST API from command line interface.
Context
- API Login to get Bearer token
- API docs and examples for various programming languages, there is Boards / Export for exporting board with API
- In the right menu, scroll down REST API Docs etc links =====>
- Wekan-Gogs integration with Node.js https://github.com/wekan/wekan-gogs
Install
You need python3.
Windows
choco install python3
# REBOOT
pip3 install pip --upgrade
pip3 install json
python3 wekan.pyDebian/Ubuntu
sudo apt-get -y install python3 python3-pip python3-simplejson
sudo pip3 install pip --upgrade
chmod +x wekan.py
./wekan.pyUsage
Copy the api.py script to you machine. Newest Wekan Python CLI api.py here.
Then, in this script, look for and change:
- wekanurl: https://boards.example.com => Your Wekan URL
- username (could be username or [email protected])
- Only works with password login admin user. Does not work with LDAP, OAuth2 etc.
Keep in mind your Wekan credentials are potentially accessible in this file.
Then call it without any argument to see if everything is all right. You should just get usage examples.
File: docs/API/REST-API.md
REST API is not complete yet, please add missing functionality with pull requests to devel branch.
If you are in a hurry, you can use these to have more functionality:
For workflows see If-this-then-that issue than mentions Huginn, Flogo etc.
Wekan REST API
The REST API allows you to control and extend Wekan with ease.
If you are an end-user and not a dev or a tester, create an issue to request new APIs.
All API calls in the documentation are made using
curl. However, you are free to use Java / Python / PHP / Golang / Ruby / Swift / Objective-C / Rust / Scala / C# or any other programming languages.
Production Security Concerns
When calling a production Wekan server, ensure it is running via HTTPS and has a valid SSL Certificate. The login method requires you to post your username and password in plaintext, which is why we highly suggest only calling the REST login api over HTTPS. Also, few things to note:
- Only call via HTTPS
- Implement a timed authorization token expiration strategy
- Ensure the calling user only has permissions for what they are calling and no more
Summary
Authentication
| HTTP Method | Url | Short Description |
|---|---|---|
POST |
/users/login |
Authenticate with the REST API. |
Users
| HTTP Method | Url | Short Description |
|---|---|---|
POST |
/users/register |
Register a new user. |
POST |
/api/users |
Create a new user. |
PUT |
/api/users/:id |
Disable an existing user. |
PUT |
/api/users/:id |
Enable an existing user. |
PUT |
/api/users/:id |
Admin takes the ownership. |
DELETE |
/api/users/:id |
Delete an existing user. (Warning) |
GET |
/api/users/:id |
Gets a user's information. |
GET |
/api/users |
All of the users. |
GET |
/api/user |
Gets a logged-in user. |
Cards
| HTTP Method | Url | Short Description |
|---|---|---|
POST |
/api/boards/:boardId/lists/:listId/cards |
Add a card to a list, board, and swimlane. |
PUT |
/api/boards/:boardId/lists/:fromListId/cards/:cardId |
Update a card. |
DELETE |
/api/boards/:boardId/lists/:listId/cards/:cardId |
Delete a card. |
Rules (Board Automation / IFTTT)
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/boards/:boardId/rules |
List all automation rules of a board. |
GET |
/api/boards/:boardId/rules/:ruleId |
Get one rule with its trigger and action. |
POST |
/api/boards/:boardId/rules |
Add an automation rule, e.g. add/remove a member when a card is moved to/from a list (#2674). |
PUT |
/api/boards/:boardId/rules/:ruleId |
Edit a rule's title, trigger and/or action. |
DELETE |
/api/boards/:boardId/rules/:ruleId |
Remove a rule and its trigger and action. |
Board Domain Sharing
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/boards/:boardId/domains |
List the email domains a board is shared with. |
POST |
/api/boards/:boardId/domains |
Share a board with an email domain. |
DELETE |
/api/boards/:boardId/domains/:domain |
Stop sharing a board with an email domain. |
GlobalAdmin Settings
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/settings |
Read the Admin Panel global settings. |
PUT |
/api/settings |
Update the Admin Panel global settings. |
Attachments
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/boards/:boardId/attachments |
List the live attachments of a board. |
GET |
/api/boards/:boardId/attachments/deleted |
List the soft-deleted attachments of a board. |
DELETE |
/api/boards/:boardId/attachments/:attachmentId |
Soft-delete an attachment. |
POST |
/api/boards/:boardId/attachments/:attachmentId/restore |
Restore a soft-deleted attachment. |
Board Settings: card field order
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/boards/:boardId/cardFieldOrder |
Get the order of the opened card's sections. |
PUT |
/api/boards/:boardId/cardFieldOrder |
Set the order of the opened card's sections. |
Board Settings: Board View
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/boards/:boardId/boardViewSettings |
Get which Board View menu entries a board offers, its defaults and their order. |
PUT |
/api/boards/:boardId/boardViewSettings |
Set which views are offered, which is the default, and the menu order. |
Admin Panel: Problems
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/admin/problems |
The Problems status overview and new-problem counts. |
GET |
/api/admin/problems/:stream |
One page of a problem stream. |
POST |
/api/admin/problems/:stream/acknowledge |
Acknowledge a stream's new problems. |
Admin Panel: OAuth login providers and passwordless
| HTTP Method | Url | Short Description |
|---|---|---|
GET |
/api/admin/oauth-providers |
Which source is in effect for every provider setting. |
PUT |
/api/admin/oauth-providers/:providerKey |
Update one provider's Admin Panel settings. |
PUT |
/api/admin/passwordless |
Turn passwordless login on or off. |
Login
| URL | Requires Auth | HTTP Method |
|---|---|---|
/users/login |
no |
POST |
Payload
Authentication with username
| Argument | Example | Required | Description |
|---|---|---|---|
username |
myusername |
Required | Your username |
password |
my$up3erP@ssw0rd |
Required | Your password |
Authentication with email
| Argument | Example | Required | Description |
|---|---|---|---|
email |
[email protected] |
Required | Your email |
password |
my$up3erP@ssw0rd |
Required | Your password |
- Notes:
- You will need to provide the
tokenfor any of the authenticated methods.
Example Call - As Form Data
DOES NOT WORK ! Please use As JSON example below !
https://github.com/wekan/wekan/issues/4807
curl http://localhost:3000/users/login \
-d "username=myusername&password=mypassword"curl http://localhost:3000/users/login \
-d "[email protected]&password=mypassword"Example Call - As JSON
THIS WORKS !! Alternatively, look at api.py example at https://github.com/wekan/wekan
NOTE: Username and password is case sensitive. So type BIG and small letters correctly.
curl -H "Content-type:application/json" \
http://localhost:3000/users/login \
-d '{ "username": "myusername", "password": "mypassword" }'curl -H "Content-type:application/json" \
http://localhost:3000/users/login \
-d '{ "email": "[email protected]", "password": "mypassword" }'Result
{
"id": "user id",
"token": "string",
"tokenExpires": "ISO encoded date string"
}Result example
{
"id": "XQMZgynx9M79qTtQc",
"token": "ExMp2s9ML1JNp_l11sIfINPT3wykZ1SsVwg-cnxKdc8",
"tokenExpires": "2017-12-15T00:47:26.303Z"
}Board Domain Sharing
Boards can be shared with every user on an email domain (for example everyone
with an @example.com address). These endpoints list, add and remove the domains a
board is shared with.
A board admin (or a site admin) is required to add or remove domains. Domains are
validated: they are stored lowercase, must contain a ., and must not contain @
or whitespace.
The matching api.py commands are boarddomains, addboarddomain andremoveboarddomain.
List board domains
| URL | Requires Auth | HTTP Method |
|---|---|---|
/api/boards/:boardId/domains |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/boards/abcd1234/domainsAdd a board domain
| URL | Requires Auth (board admin) | HTTP Method |
|---|---|---|
/api/boards/:boardId/domains |
yes |
POST |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X POST \
http://localhost:3000/api/boards/abcd1234/domains \
-d '{ "domain": "example.com" }'Remove a board domain
| URL | Requires Auth (board admin) | HTTP Method |
|---|---|---|
/api/boards/:boardId/domains/:domain |
yes |
DELETE |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-X DELETE \
http://localhost:3000/api/boards/abcd1234/domains/example.comGlobalAdmin Settings
These endpoints read and update the Admin Panel global settings (registration,
product name, logos, custom head / manifest, accessibility and support pages, and
so on). They are global-admin only.
Updates are applied through a field whitelist, so only the supported settings
fields can be changed. For security, mailServer / SMTP credentials are never
returned by GET and are never writable by PUT.
The matching api.py commands are getsettings and editsettings <field> <value>.
Get settings
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/settings |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/settingsUpdate settings
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/settings |
yes |
PUT |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/settings \
-d '{ "productName": "My WeKan", "disableRegistration": true }'Attachments
Deleting an attachment from a card is a soft delete (see
History.md ยง12): the file is kept,
the card and the minicard badge hide it, and the card history - or this API -
restores it. There is no hard delete of a single attachment over the API;
the one hard delete is deleting an archived board with Admin Panel / Problems /
Delete enabled. All three endpoints go through the same server methods the
card and the card history use, so the permission check, the cover unset and
the history row are the ones the UI gets.
List deleted attachments
| URL | Requires Auth (board access) | HTTP Method |
|---|---|---|
/api/boards/:boardId/attachments/deleted |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/boards/BOARDID/attachments/deletedResult:
[
{
"attachmentId": "sKHd9a2vLQ7Wq3xPz",
"attachmentName": "spec.pdf",
"attachmentType": "application/pdf",
"boardId": "BOARDID",
"swimlaneId": "yhY4RJmoZ2P7hFjQm",
"listId": "vFnjPvQHnKf2EzRfE",
"cardId": "a2oXL5HGdVTZuTjxi",
"deletedAt": "2026-09-11T10:12:41.203Z",
"deletedBy": "USERID",
"deleteBatchId": "attachment-1789107161203-USERID"
}
]The live attachments are listed by GET /api/boards/:boardId/attachments.
Soft-delete an attachment
| URL | Requires Auth (may edit the card) | HTTP Method |
|---|---|---|
/api/boards/:boardId/attachments/:attachmentId |
yes |
DELETE |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-X DELETE \
http://localhost:3000/api/boards/BOARDID/attachments/ATTACHMENTIDResult: { "deleted": true, "batchId": "attachment-1789107161203-USERID" }.
Idempotent: an attachment that is already deleted is left as it is. If the
attachment was the card's cover, the cover is unset.
Restore an attachment
| URL | Requires Auth (may edit the card) | HTTP Method |
|---|---|---|
/api/boards/:boardId/attachments/:attachmentId/restore |
yes |
POST |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-X POST \
http://localhost:3000/api/boards/BOARDID/attachments/ATTACHMENTID/restoreResult: { "restored": true } (false when the attachment was not deleted).
The cover is never re-set by a restore.
Board Settings: card field order
The opened card draws its Labels, Dates, Members, Custom Fields and Description
sections in the order Board Settings sets. Whatever is stored, the order in
effect always contains each of the five keys exactly once: unknown keys are
dropped, duplicates keep their first position, and a missing key is appended in
its default position.
Get the card field order
| URL | Requires Auth (board access) | HTTP Method |
|---|---|---|
/api/boards/:boardId/cardFieldOrder |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/boards/BOARDID/cardFieldOrderResult:
{
"cardFieldOrder": ["labels", "dates", "members", "customFields", "description"],
"keys": ["labels", "dates", "members", "customFields", "description"]
}Set the card field order
| URL | Requires Auth (board admin) | HTTP Method |
|---|---|---|
/api/boards/:boardId/cardFieldOrder |
yes |
PUT |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/boards/BOARDID/cardFieldOrder \
-d '{ "cardFieldOrder": ["description", "customFields", "labels", "dates", "members"] }'Returns the order in effect, in the same shape as GET.
Board Settings: Board View
Which entries of the Board View menu a board offers and which one it
opens in, separately for when the board is public and when it is private, and
the order the menu lists them in - the Board View settings
popup over the API. Both endpoints answer the state in effect, the way the
menu renders it: every view key exactly once with both showOnPublic andshowOnPrivate explicit (a board that never opened the popup shows every
view), the two defaults resolved (missing or unknown reads asboard-view-swimlanes), and boardViewOrder made whole (unknown keys
dropped, missing views appended in default order). keys lists the known
view keys.
Get the Board View settings
| URL | Requires Auth (board access) | HTTP Method |
|---|---|---|
/api/boards/:boardId/boardViewSettings |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/boards/BOARDID/boardViewSettingsResult (shortened):
{
"boardViewSettings": {
"board-view-swimlanes": { "showOnPublic": true, "showOnPrivate": true },
"board-view-lists": { "showOnPublic": true, "showOnPrivate": true },
"board-view-table": { "showOnPublic": false, "showOnPrivate": true },
"...": {}
},
"defaultPublicBoardView": "board-view-swimlanes",
"defaultPrivateBoardView": "board-view-swimlanes",
"boardViewOrder": ["board-view-swimlanes", "board-view-lists", "board-view-table", "..."],
"keys": ["board-view-swimlanes", "board-view-lists", "board-view-table", "..."]
}Set the Board View settings
| URL | Requires Auth (board admin) | HTTP Method |
|---|---|---|
/api/boards/:boardId/boardViewSettings |
yes |
PUT |
The body is any subset of boardViewSettings, defaultPublicBoardView,defaultPrivateBoardView and boardViewOrder; keys not sent are left as
they are. The rules are the popup's:
- a default is always shown on its side: setting a default also ticks its
Show box, and hiding a side's current default is refused with400-
set another default first (or in the same request: defaults are applied
before the show flags, so one request can move the default and hide the
old one); - an unknown view key anywhere in the body is a
400, and nothing of that
request is applied; boardViewOrderis normalised so the menu lists every view exactly once:
the keys sent come first in the order given, the rest follow in default
order;- a body with none of the four keys is a
400.
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/boards/BOARDID/boardViewSettings \
-d '{
"defaultPublicBoardView": "board-view-roadmap",
"boardViewSettings": {
"board-view-swimlanes": { "showOnPublic": false },
"board-view-table": { "showOnPublic": false, "showOnPrivate": true }
},
"boardViewOrder": ["board-view-roadmap", "board-view-gantt"]
}'Returns the settings in effect, in the same shape as GET. A refusal:
{ "error": "boardViewSettings.board-view-swimlanes.showOnPublic: cannot hide the public default view; set defaultPublicBoardView to another view first" }Admin Panel: Problems
The Admin Panel โ Problems pages over the API, global-admin only and
read-only apart from acknowledging a stream. Each row of a stream is a
summary that accumulates (count, firstAt..at, actors), never a row per
event - see Problems.
Problems overview
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/problems |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/admin/problemsResult:
{
"inProgress": [{ "kind": "board-repair", "active": true, "message": "Board data-repair โ 12/146 boards" }],
"problems": [{ "id": "broken-cards", "severity": "warning", "count": 3, "title": "Broken cards", "detail": "..." }],
"newProblems": [{ "stream": "security", "count": 2 }, { "stream": "database", "count": 1 }],
"streams": ["security", "speed", "tests", "cpu", "database", "integrity"]
}Problem stream
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/problems/:stream |
yes |
GET |
:stream is one of security, speed, tests, cpu, database,integrity or api (the REST API usage report). Query parameters: limit
(1..200, default 50), skip (default 0) and search (case-insensitive text
over the columns the page shows).
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
"http://localhost:3000/api/admin/problems/database?limit=20&search=disk"Result: { "stream": "database", "total": 1, "limit": 20, "skip": 0, "rows": [ ... ] }.
Acknowledge a stream
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/problems/:stream/acknowledge |
yes |
POST |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-X POST \
http://localhost:3000/api/admin/problems/security/acknowledgeResult: { "acknowledged": "security" }. The overview then reports zero new
problems for the stream until the next one is recorded.
Admin Panel: OAuth login providers and passwordless
The Admin Panel / People / Login section for Meteor's own accounts-*
login services (Google, GitHub, Facebook, X/Twitter, Meteor Developer, Weibo,
Meetup) and passwordless email codes - see
OAuth Providers and
Passwordless. Global-admin only. A
value saved here wins over the OAUTH_* / PASSWORDLESS_ENABLED environment
variable and takes effect without a restart. A provider's secret is never
returned: it is reported only as { "source", "hasValue" }.
Get OAuth provider settings
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/oauth-providers |
yes |
GET |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
http://localhost:3000/api/admin/oauth-providersResult (source is env, admin or unset):
{
"providers": {
"google": {
"enabled": { "source": "admin", "value": true },
"id": { "source": "env", "value": "1234.apps.googleusercontent.com" },
"secret": { "source": "env", "hasValue": true }
},
"github": { "enabled": { "source": "unset", "value": null }, "id": { "source": "unset", "value": null }, "secret": { "source": "unset", "hasValue": false } }
},
"loginStyle": { "source": "env", "value": "popup" },
"mergeExistingUsers": { "source": "unset", "value": null },
"passwordless": { "source": "admin", "value": false }
}Update an OAuth provider
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/oauth-providers/:providerKey |
yes |
PUT |
:providerKey is one of google, github, facebook, twitter,meteor-developer, weibo, meetup. Body fields, all optional: enabled,id, secret (an empty or missing secret keeps the stored one), loginStyle
(popup or redirect), and the two settings shared by every provider,globalLoginStyle and mergeExistingUsers.
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/admin/oauth-providers/github \
-d '{ "enabled": true, "id": "Iv1.abc123", "secret": "...", "loginStyle": "redirect" }'Returns the same source report as GET - without the secret.
Passwordless
| URL | Requires Auth (global admin) | HTTP Method |
|---|---|---|
/api/admin/passwordless |
yes |
PUT |
curl -H "Authorization: Bearer t7iYB86mXoLfP_XsMegxF41oKT7iiA9lDYiKVtXcctl" \
-H "Content-type:application/json" \
-X PUT \
http://localhost:3000/api/admin/passwordless \
-d '{ "enabled": true }'Result: { "passwordless": { "source": "admin", "value": true } }.