Skip to content

Accretion API (producers)

Production-board tasks live in Accretion Engine at accretion.sinxjy.com. Producers onboard their coding agent with a personal ace_ token, and the agent edits the board directly over this REST API — no MCP server required. Everything below is the verified live contract for project 11 (Rephrased).

Auth

  • Base URL: https://accretion.sinxjy.com/api/v1
  • Every request: header Authorization: Bearer <token>
  • The producer's token is stored locally at ~/.rephrased/accretion-token.txt (Windows: C:\Users\<you>\.rephrased\accretion-token.txt), written by MCP onboarding after validation.
  • The token IS the producer's identity. Everything the agent creates or moves is recorded as the token owner. Never paste it in chat; re-register to rotate.

Roles in project 11: admin, producer, lead, member. - WRITER_ROLES (admin, producer, lead, member) — create / update / delete / move / assign work items. - PLANNER_ROLES (admin, producer, lead) — create / reorder / delete board sections.

Endpoints (project id = 11)

Method Path What it does
GET /auth/me Verify the token — returns user id / username / email. Run first.
GET /projects Projects this token can see (membership-scoped, not an inventory).
GET /projects/11/members Members + their userId values for assignments.
GET /projects/11/work-items List top-level tasks. Filters: boardId, sectionId, categoryId, stageId, importanceId, milestoneId, parentId, isStory, search, sortBy, sortDir.
GET /projects/11/work-items/{id} One task, full detail. 200 = live, 404 = soft-deleted.
POST /projects/11/work-items Create. See payload below.
PATCH /projects/11/work-items/{id} Update fields (stage, board, section, assignees are separate).
PATCH /projects/11/work-items/bulk/move Move many: {"ids":[1,2], "stageId":53, "boardId":25?, "sectionId":?}.
PATCH /projects/11/work-items/bulk/reorder {"items":[{"id":1,"sortOrder":0}, ...]}.
POST /projects/11/work-items/{id}/assignments Assign: {"userId": N} → 201. Fires an in-app notification. No GET assignments route exists.
DELETE /projects/11/work-items/{id}/assignments/{userId} Unassign → 204.
POST /projects/11/boards/{id}/sections Create a board section (PLANNER_ROLES): {"name":"ENGINEER","stageSetId":2,"categoryId":97,"materializeDefault":false}.
DELETE /projects/11/work-items/{id} Soft-delete. Deleting a section soft-deletes the tasks inside it.

Create payload (POST /projects/11/work-items)

  • title (required, 1–500)
  • description (≤ 10000)
  • code (≤ 50, free text, not unique — duplicates exist)
  • categoryId, stageId, importanceId, boardId, sectionId, milestoneId, parentId (all optional, must belong to project 11)
  • isStory (bool), estimatedCost, startDate, dueDate

Update payload (PATCH /projects/11/work-items/{id})

Same fields, nullable, plus sortOrder.

Project 11 ID tables

Boards: 22 26/09/14 S01 · 23 26/09/21 S02 · 24 26/09/28 S03 · 25 10/05/2026 S04 Categories: 90 Art · 91 Design · 92 Writing · 93 Marketing · 94 Sound · 95 Ideas · 96 Bug · 97 Engineering Importance: 41 Urgent · 42 High · 43 Normal · 44 Low Milestones: 71 Second Playable · 72 Midterm · 73 SOTG · 74 Alpha · 75 Beta · 76 Final

Stage sets: - default (null): 50 Blocked · 51 Clarification · 52 Ready · 53 In Progress · 54 Review · 55 Done - set 1: 56 Blocked · 63 Not Started · 65 In progress · 66 Complete · 67 Needs Revision · 68 Additional Time - set 2 (ENGINEER): 69 BLOCKED · 70 READY · 71 IN PROGRESS · 72 IN REVIEW · 73 APPROVED · 74 SUBMITTED · 75 COMPLETE

Board 23 (S02) sections: ENGINEER (category 97, stage set 2) · DESIGN (category 91, default set) · NARRATIVE (category 92, default set) · ART (category 90, set 1).

Traps that cost real time (verified)

  1. The flat list hides subtasks. GET /projects/11/work-items excludes items with a parentId unless you pass ?parentId=X. "Gone from the list" ≠ deleted — check per-id: 200 = live, 404 = soft-deleted. Suspicious sign: flat totalCount smaller than the sum of the board sections' taskCounts.
  2. Section-less boards silently re-stage tasks. Boards 22/24/25 ship with zero sections. On a section-less board, any non-default-set stageId (e.g. ENGINEER set 2) is silently re-homed to the default set's first stage (50 Blocked) — no error. Create the section first (POST /boards/{id}/sections), or accept stage 50 on fresh sprint boards.
  3. Codes are not unique. Two CORE-003s coexist. Never match tasks by code; use the numeric id.
  4. Moving a task into a section explicitly stamps that section's category onto the task ("dragging across sections = this is now Art").
  5. Error codes: 401 bad/missing token · 403 role insufficient · 400 validation (route reached — the error names the bad fields).

Curl examples (project 11)

TOK=$(cat ~/.rephrased/accretion-token.txt | tr -d '\r\n')
B=https://accretion.sinxjy.com/api/v1

# who am I (always verify first)
curl -s -H "Authorization: Bearer $TOK" "$B/auth/me"

# list tasks on the S02 board
curl -s -H "Authorization: Bearer $TOK" "$B/projects/11/work-items?boardId=23"

# create a design task on S02
curl -s -X POST -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \
  -d '{"title":"Producer task example","categoryId":91,"boardId":23,"importanceId":43}' \
  "$B/projects/11/work-items"

# move one task to In Progress (default set)
curl -s -X PATCH -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \
  -d '{"stageId":53}' "$B/projects/11/work-items/123"

# bulk-move several tasks to Done
curl -s -X PATCH -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \
  -d '{"ids":[123,124],"stageId":55}' "$B/projects/11/work-items/bulk/move"

# assign (userId from GET /projects/11/members)
curl -s -X POST -H "Authorization: Bearer $TOK" -H 'Content-Type: application/json' \
  -d '{"userId":7}' "$B/projects/11/work-items/123/assignments"

Change history

  • 2026-09-28 — Created. Producer role added to MCP onboarding; producers edit the board via REST with their own ace_ token. Endpoint + ID tables verified against the live instance and server/routes.