Skip to main content

troubleshoot

This skill should be used when a Taiga REST API call fails or behaves unexpectedly — "Taiga returns 401 / 403", "version conflict", "Taiga login fails", "can't find the object", "pagination missing results", "PATCH rejected", or any Taiga error response. Maps symptoms to causes and fixes.

Source facts

Repository
Agents-Store/opencode-plugins
Last source activity
October 3, 2026 at 23:16
Detected SKILL.md language
English
Stars
0
Forks
0

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
troubleshoot
description
This skill should be used when a Taiga REST API call fails or behaves unexpectedly — "Taiga returns 401 / 403", "version conflict", "Taiga login fails", "can't find the object", "pagination missing results", "PATCH rejected", or any Taiga error response. Maps symptoms to causes and fixes.
# Taiga Troubleshooting Match the symptom, apply the fix. Most Taiga API failures come from a missing `version`, an expired token, or using a slug where an ID is expected. ## 401 Unauthorized **Cause:** missing, malformed, or expired `TAIGA_AUTH_TOKEN`. - Confirm the header is exactly `Authorization: Bearer ${TAIGA_AUTH_TOKEN}` (Bearer, not `Token`/`JWT`). Application tokens instead use `Authorization: Application <token>`. - If the token was valid earlier in the session, it expired — refresh it rather than re-logging in: ```bash export TAIGA_AUTH_TOKEN=$(curl -s -X POST "${TAIGA_API_URL%/}/api/v1/auth/refresh" \ -H "Content-Type: application/json" -d "{\"refresh\":\"${TAIGA_REFRESH}\"}" | jq -r '.auth_token') ``` - If refresh also fails, re-run the `setup` login. ## Login itself fails (400/401 on `/auth`) - The `type` field is **required**. The body must be `{"type":"normal","username":...,"password":...}`. Omitting `type` is the most common login error. - `username` accepts either the username or the email — try the other if one fails. - Verify `TAIGA_API_URL` points at the instance root (no `/api/v1` suffix, no trailing slash). The skill builds `${TAIGA_API_URL%/}/api/v1/auth`. ## 400 with a "version" / "stale" / conflict message **Cause:** optimistic locking. The `version` you sent is not the object's current version (it was edited since your `GET`, or you omitted `version`). Fix — re-read and retry with the fresh version: ```bash OBJ=$(curl -s -H "Authorization: Bearer ${TAIGA_AUTH_TOKEN}" "${TAIGA_API_URL%/}/api/v1/userstories/1234") VER=$(echo "$OBJ" | jq -r .version) curl -s -X PATCH -H "Authorization: Bearer ${TAIGA_AUTH_TOKEN}" -H "Content-Type: application/json" \ -d "{\"subject\":\"Updated\",\"version\":${VER}}" "${TAIGA_API_URL%/}/api/v1/userstories/1234" ``` Every `PATCH`/`PUT` on items, statuses, attachments, and custom-attribute values needs the current `version`. ## 403 Forbidden **Cause:** authenticated but the role lacks the permission, or the object is in a private project you can't access. - Check the user's role permissions: `GET /roles/{id}` and `GET /permissions`. (→ `api-reference` `projects.md`) - Admin-only operations (e.g. `GET /stats/system`, deleting others' content) require a superuser/owner account — the `TAIGA_ADMIN_*` credentials should map to one. - **`"Archived element"`** — the write targets an **archived project** (project archiving arrived in taiga-back 6.10.0, 2026-04-20; older instances do not have it). Check the project before editing: `GET /projects/{id}` returns `archived_code`, which is `null` for an active project and a string such as `"archived-by-staff"` for an archived one. Ask the project's owner or an admin to unarchive it first; do not retry the write. ## 404 / "object not found" **Cause:** usually a slug or reference number used where a numeric ID is required. - Refs like `#42` and project slugs are **not** IDs. Resolve first: ```bash curl -s -H "Authorization: Bearer ${TAIGA_AUTH_TOKEN}" \ "${TAIGA_API_URL%/}/api/v1/resolver?project=my-slug&us=42" | jq . ``` - Or use the dedicated `by_ref` endpoints: `GET /userstories/by_ref?ref=42&project=<id>` (same for tasks, issues, epics). ## A list seems to be missing rows **Cause:** pagination. List endpoints return one page by default. - Inspect headers: `curl -s -D - ... | grep -i x-pagination`. `x-pagination-count` is the true total. - Walk pages with `?page=2`, `?page=3`, … or fetch everything in one go with header `x-disable-pagination: True` (use carefully on large projects). ## Creating an item rejects a `status` / `type` / `priority` / `severity` **Cause:** those IDs are per-project. An ID valid in one project is invalid in another. - Discover valid values: `GET /<resource>/filters_data?project=<id>` or `GET /<resource>-statuses?project=<id>`. Pick the ID for that project. ## Tags don't apply Tags are arrays of `[name, color]` pairs, e.g. `"tags": [["urgent","#ff0000"],["backend",null]]` — not bare strings. Project-level tag management uses `/projects/{id}/create_tag` etc. (→ `projects.md`). ## Optional convenience MCP If you'd rather call tools than curl, there is no official Taiga MCP server, but community ones exist: [`greddy7574/taigaMcpServer`](https://github.com/greddy7574/taigaMcpServer) (npm `taiga-mcp-server`, run with npx), [`talhaorak/pytaiga-mcp`](https://github.com/talhaorak/pytaiga-mcp) and [`madebyclowd/taiga-mcp-server`](https://github.com/madebyclowd/taiga-mcp-server). They cover a subset only — for full coverage use the REST endpoints in `api-reference`. They are unaudited third-party code and not dependencies of this plugin; review one before giving it your Taiga credentials.
View on GitHub