Member Directory
A Member Directory is a Customer’s own list of people and groups, pushed into its Tenant so access follows employment.
Properties
| Property | Type | Required | Description |
|---|---|---|---|
state | string | required | Where it stands; only active fills Roles. |
groupRoles | json | Which directory group fills which Role in the Tenant. | |
lastChangeAt | datetime | When the Customer’s directory last pushed a change. |
Object
{
"$id": "https: //api.sb/ kilnbakery.com/ member-directories/ member_directory_1",
"$type": "MemberDirectory",
"state": "draft",
"groupRoles": {},
"lastChangeAt": "2026-10-22T12: 00: 00Z"
}Relationships
- A Member Directory provisions one Tenant: a Member Directory fills and empties Roles in one Tenant as people join and leave the Customer.
provisions, inverseprovisionedBy.
Lifecycle
| State | Meaning | Moves to |
|---|---|---|
draft (first) | Waiting for the Customer’s directory to connect. | active by MemberDirectory.provision |
active | The Customer’s directory pushes every hire, change and departure, and its groups fill Roles. | failing on MemberDirectory.failed; inactive by MemberDirectory.deactivate |
failing | Pushes stopped arriving or are refused, so access no longer follows the directory. | active by MemberDirectory.provision; inactive by MemberDirectory.deactivate |
inactive | Turned off: everyone it added keeps their Roles until an admin removes them. | active by MemberDirectory.provision |
Verbs
createCreates a Member Directory.POST /{namespace}/member-directoriesgetReturns one Member Directory by id.GET /{namespace}/member-directories/{id}listReturns Member Directories, newest first, one page at a time.GET /{namespace}/member-directoriesupdateChanges the given properties of a Member Directory.PATCH /{namespace}/member-directories/{id}deactivateDeactivate stops a Member Directory’s pushes; everyone it added keeps their Roles until an admin removes them.POST /{namespace}/member-directories/{directory}/deactivatedeprovisionDeprovision ends one person’s access to a Tenant in one Action when the Customer’s directory removes them.POST /{namespace}/member-directories/{directory}/deprovisionprovisionProvision starts a Customer’s Member Directory pushing people and groups into its Tenant, with groups mapped to Roles.POST /{namespace}/member-directories/provision
Events
Events no Verb emits. Each Verb’s Event is in the Verbs table above; every Event is delivered in the same shape.
MemberDirectory.failed
A Customer’s directory stopped pushing, or its pushes are refused, so access no longer follows it. Raised by the rail.
| Field | Type | Required | Description |
|---|---|---|---|
name | string | required | MemberDirectory.failed. |
at | datetime | required | When it happened. |
seq | integer | Its position in the namespace, one more than the Event before; any seq is a cursor into the history. | |
data | json | required | The Thing as the Action left it. |
data.memberDirectory | Member Directory | required | The Member Directory as the change left it. |
data.memberDirectory.state | string | required | Where it stands; only active fills Roles. |
data.memberDirectory.groupRoles | json | Which directory group fills which Role in the Tenant. | |
data.memberDirectory.lastChangeAt | datetime | When the Customer’s directory last pushed a change. | |
data.cause | string | required | What failed: tokenRevoked, noPushIn24h, or pushRefused. |
data.previous.state | string | required | The state before this Event: active. |
{
"$id": "https: //api.sb/ kilnbakery.com/ events/ event_1",
"$type": "Event",
"name": "MemberDirectory.failed",
"at": "2026-10-22T12: 00: 00Z",
"data": {
"memberDirectory": {
"$id": "https: //api.sb/ kilnbakery.com/ member-directories/ member_directory_1",
"$type": "MemberDirectory",
"state": "failing",
"groupRoles": {},
"lastChangeAt": "2026-10-22T12: 00: 00Z"
},
"cause": "tokenRevoked",
"previous": {
"state": "active"
}
},
"seq": 1
}Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.
| Operation | owner | admin | member | viewer |
|---|---|---|---|---|
MemberDirectory.create | Yes | Yes | No | No |
MemberDirectory.get | Yes | Yes | Yes | Yes |
MemberDirectory.list | Yes | Yes | Yes | Yes |
MemberDirectory.update | Yes | Yes | No | No |
MemberDirectory.deactivate | Yes | Yes | No | No |
MemberDirectory.deprovision | Yes | Yes | No | No |
MemberDirectory.provision | Yes | Yes | No | No |
Call it
Provision the latest member directory with a tenant.Example
A 400-person Customer pushes its staff directory into its Tenant. The finance group fills the Role that approves Bills, and a person who leaves loses access the same hour.