Two Minute Toolkit TwoMinuteRACI
Slide Deck Quality RACI Matrices in 2 minutes or less

RACI Matrix HTTP API

POST a small JSON description and get back a deck-ready PNG (or SVG). The endpoint is open and CORS-enabled, so it works from browsers, scripts, CI and anywhere else you can make an HTTP call. The same JSON opens in the builder.

POST https://www.twominutetoolkit.com/api/render/raci
Fair use: rate-limited to 20 requests a minute per IP (bursts capped at 5 a second), shared across every Two Minute tool, with a 64 KB body cap. No key or sign-up needed.

Try it

Open in builder

Code samples

Live preview

Click Render to call the API.

Request body

FieldTypeDescription
titlestringHeading shown top-left of the chart at 22px bold. Every chart has one title row; an empty string hides it.
max 140 chars · default "RACI matrix"
rolesrequiredstring[]Column headings, left to right: the roles, teams or people, e.g. ["Project manager", "Dev lead", "Design", "Legal"]. 1–10 roles, up to 30 characters each; long names wrap onto up to three lines. Prefer roles over personal names.
max 10 items
tasksrequiredobject[]The rows, top to bottom (1–30): tasks, deliverables or decisions, each with one cell per role. A row with "type": "section" is a full-width phase heading (e.g. "Discovery") that groups the tasks below it; it has no cells.
max 30 items
modelstring"RACI" (Responsible, Accountable, Consulted, Informed) or "RASCI", which adds S for Support. Sets the legend and the builder's click cycle; an S in a RACI chart is still drawn and added to the legend. Default "RACI".
"RACI", "RASCI" · default "RACI"
checksbooleanCheck the RACI rules: every task has exactly one A and at least one R (A/R counts as both), and every role is R or A on some task. Tasks that break a rule get an amber dot and a short note ("No A", "2 As", "No R") at the row end, and every broken rule is listed in `warnings`. Default true; set false to hide the notes.
default true
legendbooleanShow a legend row under the matrix explaining each letter. Default true.
default true
widthintegerChart width in pixels (640–2400, default 1280, which suits a 16:9 slide). PNG output renders at 2x. Height is computed from the content.
640–2400 · default 1280
palettestring[]Hex colours: the first fills R chips, the second tints C chips, the third tints S chips (A is always dark and I light gray, so the letters stay distinct). Pass the user's brand colours here when they name them.
max 12 items · default ["#4f46e5","#0ea5e9","#10b981","#f59e0b","#ef4444","#6b7280"]

tasks[] item

FieldTypeDescription
namerequiredstringTask or section name, e.g. "Approve the budget" or "Discovery". Keep tasks to a short verb phrase; long names wrap onto two lines, then truncate.
max 60 chars
typestringOmit for a normal task row. "section" draws a full-width phase heading instead; its cells are ignored.
"task", "section"
cellsstring[]One cell per role, in the same order as `roles`: "R" Responsible (does the work), "A" Accountable (owns it and signs off; exactly one per task), "C" Consulted (two-way input), "I" Informed (kept up to date), "S" Support (RASCI only: helps the R), "A/R" for an owner who also does the work, or "" for blank. Lowercase and "R/A" are accepted. A shorter array leaves the remaining cells blank, a longer one is truncated; anything else is left blank with a warning.
max 10 items · default []

Endpoints

  • POST /api/render/raci returns image/png; add ?format=svg for SVG.
  • GET /raci.png?d=<payload> and /raci.svg?d=<payload> render a chart from a link. The payload is the JSON body, raw-deflated and base64url-encoded. Nothing is stored: links are permanent and cached for a year.
  • /raci#d=<payload> opens the same chart in the builder for editing.
  • GET /api/render/raci?demo=1 returns the demo chart.
  • GET /api/schema/raci returns the JSON Schema, for code generators and AIs.

Errors and adjustments

Input is lenient where the intent is clear: numeric strings become numbers, out-of-range values are clamped, and unknown fields are ignored. Adjustments are listed in the X-Render-Warnings header. Anything unclear returns a 400 that says how to fix it:

{
  "error": "Invalid payload",
  "issues": [{ "path": "tasks", "message": "must be an array" }],
  "example": { … }
}

Calling from an AI assistant?

Use the hosted MCP server instead. It gives Claude, Cursor and other MCP clients a create_raci tool that returns the image plus image, SVG and edit links. See the MCP page →