Skip to Content
APIDecisions
last verified · 2026-07-16

Decisions

A decision is a recorded choice for a project — a slug, a title, a markdown body, and structured frontmatter that carries its status (open until someone resolves it). Use this resource to file a decision that needs sign-off from an external system, or to read/resolve one programmatically.

Resolving a decision fires a decision.resolved webhook event to any subscription listening for it.

GET/api/v1/decisions

List decisions for your project.

NameTypeRequiredDefaultDescription
limitintegerNo50Max rows to return.
offsetintegerNo0Rows to skip, for simple pagination.
curl
curl "https://lumis.work/api/v1/decisions?limit=20" \ -H "Authorization: Bearer $LUMIS_MCP_TOKEN"
TypeScript
const res = await fetch('https://lumis.work/api/v1/decisions', { headers: { authorization: `Bearer ${process.env.LUMIS_MCP_TOKEN}` }, }); const { decisions } = await res.json();
Python
res = requests.get( "https://lumis.work/api/v1/decisions", headers={"authorization": f"Bearer {os.environ['LUMIS_MCP_TOKEN']}"}, ) decisions = res.json()["decisions"]
{ "version": "v1", "decisions": [ { "id": "d8a2...", "project_key": "acme-co", "venture_key": "acme-co", "slug": "vendor-choice-2026-07", "doc_type": "decision", "title": "Which email vendor to standardize on", "body_markdown": "We're comparing Postmark and Resend...", "frontmatter": { "status": "open" }, "created_at": "2026-07-10T09:00:00.000Z", "updated_at": "2026-07-10T09:00:00.000Z" } ] }
POST/api/v1/decisions

Create a decision record. It’s created with frontmatter.status set to "open" regardless of what you pass — new decisions always start open.

NameTypeRequiredDescription
slugstringYesUnique identifier, lowercase letters/digits/hyphen/underscore only. A duplicate slug returns 409.
titlestringYesDecision title.
body_markdownstringNoMarkdown body (bodyMarkdown also accepted).
frontmatterobjectNoAdditional structured metadata, merged under status.
curl
curl -X POST https://lumis.work/api/v1/decisions \ -H "Authorization: Bearer $LUMIS_MCP_TOKEN" \ -H "Content-Type: application/json" \ -d '{"slug": "vendor-choice-2026-07", "title": "Which email vendor to standardize on"}'
TypeScript
const res = await fetch('https://lumis.work/api/v1/decisions', { method: 'POST', headers: { authorization: `Bearer ${process.env.LUMIS_MCP_TOKEN}`, 'content-type': 'application/json', }, body: JSON.stringify({ slug: 'vendor-choice-2026-07', title: 'Which email vendor to standardize on', }), }); const { decision } = await res.json();
Python
res = requests.post( "https://lumis.work/api/v1/decisions", headers={"authorization": f"Bearer {os.environ['LUMIS_MCP_TOKEN']}"}, json={"slug": "vendor-choice-2026-07", "title": "Which email vendor to standardize on"}, ) decision = res.json()["decision"]

Returns 201 with { "version": "v1", "decision": {...} }.

GET/api/v1/decisions/:id

Read a single decision by id. Returns 404 if it doesn’t exist or isn’t a decision-type document.

PATCH/api/v1/decisions/:id

Update a decision’s title, body, or frontmatter.

NameTypeRequiredDescription
titlestringNoNew title.
body_markdownstringNoNew body (bodyMarkdown also accepted).
frontmatterobjectNoReplaces the frontmatter object.
DELETE/api/v1/decisions/:id

Delete a decision. Returns { "version": "v1", "ok": true }, or 404 if it doesn’t exist.

POST/api/v1/decisions/:id/resolve

Resolve an open decision: sets frontmatter.status to "resolved" and records the resolution. A decision that’s already resolved returns 409.

NameTypeRequiredDescription
statusstringYesThe verdict (verdict is also accepted as an alias).
option_idstringNoWhich option was chosen, if the decision offered a set.
notestringNoFree-text resolution note.
curl
curl -X POST https://lumis.work/api/v1/decisions/d8a2.../resolve \ -H "Authorization: Bearer $LUMIS_MCP_TOKEN" \ -H "Content-Type: application/json" \ -d '{"status": "postmark", "note": "Better deliverability track record."}'
TypeScript
await fetch(`https://lumis.work/api/v1/decisions/${id}/resolve`, { method: 'POST', headers: { authorization: `Bearer ${process.env.LUMIS_MCP_TOKEN}`, 'content-type': 'application/json', }, body: JSON.stringify({ status: 'postmark', note: 'Better deliverability track record.' }), });
Python
requests.post( f"https://lumis.work/api/v1/decisions/{id}/resolve", headers={"authorization": f"Bearer {os.environ['LUMIS_MCP_TOKEN']}"}, json={"status": "postmark", "note": "Better deliverability track record."}, )
{ "version": "v1", "decision": { "id": "d8a2...", "frontmatter": { "status": "resolved", "resolution": { "verdict": "postmark", "note": "Better deliverability track record.", "resolved_at": "2026-07-16T18:10:00.000Z" } } } }