Crismo REST API
A workspace-scoped HTTP API for your process models: diagrams, value chains, dictionaries, attributes, share links, and milestones. The MCP server and the crismo CLI are built on this API.
Authentication
Send your API key as a bearer token. Keys look like crismo_XXXX_... and are scoped to a single workspace. Requests without a valid key return 401.
Base URL https://api.crismo.io (staging uses a separate host).
curl https://api.crismo.io/diagrams \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Conventions
- All responses are JSON. Collection endpoints return an object with a
successflag and the named collection. - Diagram edits use a JSON Patch. Read the diagram, then send the changes; the server validates.
- Unknown routes return
404. IDs in paths are URL-encoded.
{
"success": true,
"dictionaries": [
{ "id": "38dr58KE6HPF", "name": "Locations" }
]
}Authentication
/auth/statusCheck the current key and workspace.
curl -X GET https://api.crismo.io/auth/status \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Diagrams
/diagramsList all diagrams in the workspace.
curl -X GET https://api.crismo.io/diagrams \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}Get a diagram. Returns BPMN XML plus a compact DSL.
curl -X GET https://api.crismo.io/diagrams/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/createCreate a diagram from a patch definition.
Body: { name, patch, author? }
curl -X POST https://api.crismo.io/diagrams/create \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name, patch, author? }'/diagrams/{id}/patchApply a JSON Patch (add/remove/rename/move/reconnect). Server validates.
Body: { patch, author?, message? }
curl -X POST https://api.crismo.io/diagrams/id/patch \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ patch, author?, message? }'/diagrams/{id}Delete a diagram.
curl -X DELETE https://api.crismo.io/diagrams/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Process links
/diagrams/{id}/linksList drill-down / upstream / downstream links.
curl -X GET https://api.crismo.io/diagrams/id/links \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/linksLink an element to another diagram.
Body: { elementId, targetDiagramId }
curl -X POST https://api.crismo.io/diagrams/id/links \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ elementId, targetDiagramId }'/diagrams/{id}/links/{elementId}Remove a process link.
curl -X DELETE https://api.crismo.io/diagrams/id/links/elementId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/contextWhich value chain / segment the diagram belongs to.
curl -X GET https://api.crismo.io/diagrams/id/context \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Value chains
/value-chainsList value chains.
curl -X GET https://api.crismo.io/value-chains \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chains/templatesList available templates.
curl -X GET https://api.crismo.io/value-chains/templates \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chains/{id}Get a value chain with its segments.
curl -X GET https://api.crismo.io/value-chains/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chainsCreate a value chain.
Body: { name, description?, type: core|support, template? }
curl -X POST https://api.crismo.io/value-chains \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name, description?, type: core|support, template? }'/value-chains/{id}Update name / description / status.
Body: { name?, description?, status? }
curl -X PUT https://api.crismo.io/value-chains/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name?, description?, status? }'/value-chains/{id}Delete a value chain and its segments.
curl -X DELETE https://api.crismo.io/value-chains/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chains/{id}/duplicateDuplicate a value chain.
Body: { name? }
curl -X POST https://api.crismo.io/value-chains/id/duplicate \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name? }'/value-chains/{id}/segmentsList segments.
curl -X GET https://api.crismo.io/value-chains/id/segments \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chains/{id}/segmentsAdd a segment.
Body: { name, parent?, color, level: L1..L4 }
curl -X POST https://api.crismo.io/value-chains/id/segments \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name, parent?, color, level: L1..L4 }'/value-chains/{id}/segments/{segId}Delete a segment.
curl -X DELETE https://api.crismo.io/value-chains/id/segments/segId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/value-chains/{id}/segments/{segId}/linkLink a diagram to a segment.
Body: { diagramId }
curl -X POST https://api.crismo.io/value-chains/id/segments/segId/link \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ diagramId }'/value-chains/{id}/segments/{segId}/link/{diagramId}Unlink a diagram from a segment.
curl -X DELETE https://api.crismo.io/value-chains/id/segments/segId/link/diagramId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Dictionaries
/dictionariesList dictionaries.
curl -X GET https://api.crismo.io/dictionaries \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}Get a dictionary.
curl -X GET https://api.crismo.io/dictionaries/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionariesCreate a dictionary.
Body: { name, description? }
curl -X POST https://api.crismo.io/dictionaries \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name, description? }'/dictionaries/{id}Delete a dictionary and its entries.
curl -X DELETE https://api.crismo.io/dictionaries/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/entriesList entries.
curl -X GET https://api.crismo.io/dictionaries/id/entries \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/entriesAdd an entry.
Body: { term, definition?, synonyms? }
curl -X POST https://api.crismo.io/dictionaries/id/entries \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ term, definition?, synonyms? }'/dictionaries/{id}/entries/{entryId}Delete an entry.
curl -X DELETE https://api.crismo.io/dictionaries/id/entries/entryId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/search?q={prefix}Search entries by prefix.
curl -X GET https://api.crismo.io/dictionaries/id/search?q=prefix \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/entries/{entryId}/usagesWhere an entry is used across diagrams.
curl -X GET https://api.crismo.io/dictionaries/id/entries/entryId/usages \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/elements/{elementId}/linksLink a diagram element to a dictionary entry.
Body: { dictId, entryId }
curl -X POST https://api.crismo.io/diagrams/id/elements/elementId/links \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ dictId, entryId }'/diagrams/{id}/elements/{elementId}/links/{entryId}Unlink an element from an entry.
curl -X DELETE https://api.crismo.io/diagrams/id/elements/elementId/links/entryId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Attributes
/attributesList attribute definitions.
curl -X GET https://api.crismo.io/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/attributesCreate an attribute definition.
Body: { name, type, scope, valueType, ... }
curl -X POST https://api.crismo.io/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ name, type, scope, valueType, ... }'/attributes/{id}Delete a definition and its values.
curl -X DELETE https://api.crismo.io/attributes/id \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/elements/{elementId}/attributesGet attribute values on an element.
curl -X GET https://api.crismo.io/diagrams/id/elements/elementId/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/elements/{elementId}/attributesSet an attribute value on an element.
Body: { attributeId, value? | dictEntries? }
curl -X POST https://api.crismo.io/diagrams/id/elements/elementId/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ attributeId, value? | dictEntries? }'/diagrams/{id}/elements/{elementId}/attributes/{attributeId}Remove a value from an element.
curl -X DELETE https://api.crismo.io/diagrams/id/elements/elementId/attributes/attributeId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/entries/{entryId}/attributesGet attribute values on a dictionary entry.
curl -X GET https://api.crismo.io/dictionaries/id/entries/entryId/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/dictionaries/{id}/entries/{entryId}/attributesSet an attribute value on a dictionary entry.
Body: { attributeId, value? | dictEntries? }
curl -X POST https://api.crismo.io/dictionaries/id/entries/entryId/attributes \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ attributeId, value? | dictEntries? }'/dictionaries/{id}/entries/{entryId}/attributes/{attributeId}Remove a value from a dictionary entry.
curl -X DELETE https://api.crismo.io/dictionaries/id/entries/entryId/attributes/attributeId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Milestones
/diagrams/{id}/milestonesList milestones (checkpoints).
curl -X GET https://api.crismo.io/diagrams/id/milestones \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/milestonesCreate a checkpoint of the current state.
Body: { label?, description? }
curl -X POST https://api.crismo.io/diagrams/id/milestones \
-H "Authorization: Bearer crismo_XXXX_your_api_key" \
-H "Content-Type: application/json" \
-d '{ label?, description? }'/diagrams/{id}/milestones/{milestoneId}Get a milestone (includes BPMN XML).
curl -X GET https://api.crismo.io/diagrams/id/milestones/milestoneId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/milestones/{milestoneId}/restoreRestore to a milestone (auto-backs up first).
curl -X POST https://api.crismo.io/diagrams/id/milestones/milestoneId/restore \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/milestones/compare?from={a}&to={b}Compare two milestones.
curl -X GET https://api.crismo.io/diagrams/id/milestones/compare?from=a&to=b \
-H "Authorization: Bearer crismo_XXXX_your_api_key"/diagrams/{id}/milestones/{milestoneId}Delete a milestone.
curl -X DELETE https://api.crismo.io/diagrams/id/milestones/milestoneId \
-H "Authorization: Bearer crismo_XXXX_your_api_key"Diagram JSON Patch
POST /diagrams/create and POST /diagrams/{id}/patch accept a patch object. Read the diagram first, then send only the changes. The server rewires flows and validates the result.
{
"add": [
{
"type": "userTask | serviceTask | exclusiveGateway | subProcess | lane | ...",
"id": "optional unique id",
"name": "Display label",
"x": 0, "y": 0, "width": 100, "height": 80,
"lane": "Lane name to place element in",
"after": "elementId to insert after (auto-rewires flows)",
"attachedTo": "host element id (boundary events)"
}
],
"remove": ["elementId"],
"reconnect": [
{ "from": "srcId", "to": "dstId", "label": "gateway branch label",
"waypoints": [{ "x": 0, "y": 0 }] }
],
"rename": [{ "id": "elementId", "name": "New label" }],
"move": [{ "id": "elementId", "x": 0, "y": 0 }]
}