Duties
Duties answer “who owns this”. Mereon tracks ownership using the RACI model:
who is Responsible, Accountable, Consulted, or Informed for a topic, item, space,
or category. Duties can be assigned directly or inherited from a parent area.
Reading them needs the raci-assignment.read permission, which every role has
except external; an external account gets 403, as it does in the app.
Assigning, changing, or removing one needs duty:manage. Owners and admins
can do that. A duty assigned here is recorded as set by a person. Copying
duties down to child topics, and handing one role’s duties to another role,
stay in the app.
Get duties for an entity
Section titled “Get duties for an entity”GET /v1/duties
Returns the effective duties for one entity, including inherited ones.
Query parameters
Section titled “Query parameters”| Parameter | Type | Notes |
|---|---|---|
entityType |
string | One of TOPIC, ITEM, SPACE, CATEGORY. Required. |
entityId |
string | The entity’s id. Required. |
Request
Section titled “Request”curl "https://api.mereon.ai/v1/duties?entityType=TOPIC&entityId=top_9f2a" \ -H "Authorization: Bearer $MEREON_TOKEN"Response
Section titled “Response”{ "data": [ { "role": "ACCOUNTABLE", "actorType": "INDIVIDUAL", "actorId": "emp_7c41...", "actorUserId": "usr_8s2k...", "actorDisplayName": "Alex Doe", "inheritedFrom": null, "assignmentId": "ras_71b3...", "source": "MANUAL", "confidence": null, "learningPriorityOverride": null }, { "role": "CONSULTED", "actorType": "ROLE", "actorId": "rol_1122...", "actorUserId": null, "actorDisplayName": "Finance Manager", "inheritedFrom": { "entityType": "CATEGORY", "entityId": "cat_finance" }, "assignmentId": "ras_0d92...", "source": "AI_ENHANCED", "confidence": 0.82, "learningPriorityOverride": "HIGH" } ]}Fields
Section titled “Fields”| Field | Type | Notes |
|---|---|---|
role |
string | RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. |
actorType |
string | What kind of actor holds the duty: INDIVIDUAL, TEAM, ROLE, THIRD_PARTY, ORGANIZATION, or ROLE_KIND. |
actorId |
string | The actor’s id. For INDIVIDUAL this identifies the organization’s record of the person, not their login. The same person has a different record in each organization they belong to. |
actorUserId |
string | null | The login behind an INDIVIDUAL actor, which is the id you will find on user-keyed resources. null for every other actor type, and for a person the organization records without an account. |
actorDisplayName |
string | Human-readable name of the actor. |
inheritedFrom |
object | null | The parent entity the duty was inherited from, or null if assigned directly. |
assignmentId |
string | The assignment behind this duty. For an inherited duty it is the parent’s assignment, not one on the entity you asked about. |
source |
string | Who set the duty: MANUAL for a person’s own assignment, or AI_ENHANCED or AI_CLASSIFIED for the system’s suggestion. Most owners are suggestions, so this is what separates a confirmed owner from a proposed one. |
confidence |
number | null | How sure the suggestion was, from 0 to 1. null for a person’s own assignment. |
learningPriorityOverride |
string | null | This duty’s own learning priority (CRITICAL, HIGH, MEDIUM, or LOW). null means the topic’s priority applies. |
Assign a duty
Section titled “Assign a duty”POST /v1/duties
Assigns who is Responsible, Accountable, Consulted, or Informed for a topic,
item, space, or category. The duty is recorded as set by a person. For a
person, actorId may be the organization’s record of them, which is what a
duty read returns, or their login id, which is what the member list returns.
Leave actorId out for an organization-wide duty, which covers the
organization this token belongs to. For ROLE_KIND, actorId is INTERNAL
or EXTERNAL. A company role may set tierQualifier and advancementTierId
so the duty covers part of its advancement path. Other actor types may not.
Accountable cannot name everyone. An entity you cannot read, or one outside
the organization, is refused with 404. Limited to 10 calls a minute and 60
an hour.
Request body
Section titled “Request body”| Field | Type | Required | Notes |
|---|---|---|---|
actorType |
string | yes | ROLE, TEAM, INDIVIDUAL, THIRD_PARTY, ORGANIZATION, or ROLE_KIND. |
actorId |
string | no | Who holds the duty. Required except for ORGANIZATION. INTERNAL or EXTERNAL for ROLE_KIND. |
entityType |
string | yes | TOPIC, ITEM, SPACE, or CATEGORY. |
entityId |
string | yes | The topic, item, space, or category. |
role |
string | yes | RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. |
tierQualifier |
string | no | ALL, MIN, MAX, or EXACT. Only a company role may set this. Defaults to ALL. |
advancementTierId |
string | null | no | The tier a MIN, MAX, or EXACT duty is bound to. Omit it for ALL. |
Request
Section titled “Request”curl -X POST "https://api.mereon.ai/v1/duties" \ -H "Authorization: Bearer $MEREON_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "actorType": "ROLE", "actorId": "rol_1122", "entityType": "TOPIC", "entityId": "top_9f2a", "role": "ACCOUNTABLE" }'Response
Section titled “Response”201 Created. The duty that was written. This is the assignment itself, not
the effective list above, so it has no inheritedFrom.
| Field | Type | Notes |
|---|---|---|
id |
string | The duty id a later change or removal names. A read calls this assignmentId. |
actorType |
string | The same kinds as the request. |
actorId |
string | For a person, the organization’s record of them, including when the request named their login. |
actorDisplayName |
string | Human-readable name of the actor. |
actorUserId |
string | null | The login behind a person. null for every other actor type. |
role |
string | RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. |
entityType |
string | TOPIC, ITEM, SPACE, or CATEGORY. |
entityId |
string | The entity the duty sits on. |
tierQualifier |
string | ALL, MIN, MAX, or EXACT. |
advancementTierId |
string | null | The tier a narrowed company-role duty is bound to. |
advancementTierLabel |
string | null | That tier’s label. |
source |
string | MANUAL. A duty assigned here is a person’s own assignment. |
confidence |
number | null | null for a person’s own assignment. |
learningPriorityOverride |
string | null | CRITICAL, HIGH, MEDIUM, or LOW. null means the topic’s priority applies. |
createdAt |
string | ISO 8601. |
updatedAt |
string | ISO 8601. |
Change a duty
Section titled “Change a duty”PATCH /v1/duties/{id}
Changes the level, the learning priority, or how far a company role’s duty
reaches on its advancement path. Send at least one of role,
learningPriorityOverride, tierQualifier, and advancementTierId. The
actor and the entity stay as they are. learningPriorityOverride null
clears it so the topic’s priority applies. A duty in another organization, or
on an entity you cannot read, is refused with 404. The same limit as
assigning a duty.
Request body
Section titled “Request body”| Field | Type | Required | Notes |
|---|---|---|---|
role |
string | no | RESPONSIBLE, ACCOUNTABLE, CONSULTED, or INFORMED. |
learningPriorityOverride |
string | null | no | CRITICAL, HIGH, MEDIUM, or LOW. null clears it. |
tierQualifier |
string | no | ALL, MIN, MAX, or EXACT. Only a duty held by a company role may set this. |
advancementTierId |
string | null | no | The tier a MIN, MAX, or EXACT duty is bound to. Omit it for ALL. |
Response
Section titled “Response”200 OK. The duty, in the same shape as assigning one.
Remove a duty
Section titled “Remove a duty”DELETE /v1/duties/{id}
Removes a duty. A duty in another organization, or on an entity you cannot
read, is refused with 404. The same limit as assigning a duty.
Response
Section titled “Response”200 OK. The duty that was removed, in the same shape as assigning one.
Errors
Section titled “Errors”| Status | When |
|---|---|
400 |
The body is not the schema’s, the actor is not in this organization, an organization-wide duty names a different organization, Accountable names everyone, a tier qualifier is used on an actor that is not a company role, or this actor already holds that level on this entity. |
403 |
The token lacks duty:manage, or the caller may not take that action. |
404 |
The entity or the duty is not in this organization, or you cannot read the entity it sits on. |
429 |
More than 10 calls a minute, or 60 an hour, on that route. Retry-After says when to try again. |