Every member of a K-Block organization has exactly one role: Owner, Admin, Approver, Developer or Viewer. The role decides what that person may read and change in the dashboard and through the Cloud API.
The Cloud API enforces these rules on every request. It checks your role again each time, so a role change or a removal takes effect on your next request. The dashboard hides controls your role cannot use, but hiding a control is only a convenience: the server is the authority.
Use this page to choose a role when you invite someone, to understand a 403 refusal, and to pick the scopes of a management API key.
The five roles
| Role | Intended for | In one sentence |
|---|---|---|
| Owner | The people accountable for the organization | Everything an admin can do, plus ownership, billing, observe settings and the organization's principal identity. |
| Admin | People who manage the organization day to day | Puts configuration into service: activates policies, enables tools, manages members, keys and settings. |
| Approver | People who decide approval requests | Reads what a viewer can and decides the approval requests that admit them; changes nothing else. |
| Developer | Engineers who integrate agents and tools | Creates and edits agents, MCP servers, tools, policy drafts, gateway keys and webhooks, but cannot put a tool or a policy into service. |
| Viewer | Auditors, stakeholders, support staff | Read-only access to the organization's operational data. |
The person who creates an organization becomes its first owner. Invitations can grant any role except Owner; an owner promotes someone to owner after they have joined (see The last owner).
Developer is for one user. Team membership starts with Startup. The free Developer plan (the plan, not the developer role) has room for one member, the owner, and invitations are refused, so every task in the matrix below falls to the owner, including deciding approval requests when the rule admits owners (see Who may approve). To give people roles, an owner moves the organization to Startup or a larger plan on Billing.
Permission matrix
"Yes" means the role may do it. "Rule" means the role may do it only when the approval request's approver rule admits that person (see Who may approve).
Reading
| Task | Owner | Admin | Approver | Developer | Viewer |
|---|---|---|---|---|---|
| View agents, tools, MCP servers, policies, actions, approvals, receipts, overview and usage | Yes | Yes | Yes | Yes | Yes |
| Run a dry run, simulations and policy analysis reads | Yes | Yes | Yes | Yes | Yes |
| View the member list and the billing status | Yes | Yes | Yes | Yes | Yes |
| View the Audit log | Yes | Yes | — | — | — |
| Export a policy's evidence | Yes | Yes | — | — | — |
| View invitations | Yes | Yes | — | — | — |
| View API keys | Yes (all) | Yes (all) | — | Gateway keys only | — |
| View webhook endpoints and deliveries | Yes | Yes | — | Yes | — |
Building and integrating
| Task | Owner | Admin | Approver | Developer | Viewer |
|---|---|---|---|---|---|
| Create and edit agents (name, description, status, KID) | Yes | Yes | — | Yes | — |
| Switch which policy an agent uses | Yes | Yes | — | — | — |
| Add, edit, discover and delete MCP servers | Yes | Yes | — | Yes | — |
| Change the URL, server KID or credential of a server that has enabled tools | Yes | Yes | — | — | — |
| Create tools (developers create disabled drafts) | Yes | Yes | — | Yes | — |
| Enable a tool, authorize its upstream binding, or change what an enabled tool decides on | Yes | Yes | — | — | — |
| Create policies and draft versions; set or clear the shadow version; edit examples; save simulations | Yes | Yes | — | Yes | — |
| Create gateway API keys and revoke any gateway key | Yes | Yes | — | Yes | — |
| Create, edit, test and delete webhook endpoints | Yes | Yes | — | Yes | — |
| End an observe window, or end all of them | Yes | Yes | — | Yes | — |
Putting things into service and stopping them
| Task | Owner | Admin | Approver | Developer | Viewer |
|---|---|---|---|---|---|
| Activate a policy version, roll back, use Emergency stop… | Yes | Yes | — | — | — |
| Set a policy's disclosure (what agents are told) | Yes | Yes | — | — | — |
| Start an observe window (also needs the owner's observe setting) | Yes | Yes | — | — | — |
| Sign and submit agent delegations, revoke them | Yes | Yes | — | — | — |
| Cancel an action that is pending approval or approved but not yet run | Yes | Yes | — | — | — |
| Decide an approval request | Rule | Rule | Rule | — | — |
Organization administration
| Task | Owner | Admin | Approver | Developer | Viewer |
|---|---|---|---|---|---|
| Invite members (any role except owner) and revoke invitations | Yes | Yes | — | — | — |
| Change a member's role or remove a member who is not an owner | Yes | Yes | — | — | — |
| Grant the owner role, change an owner's role, remove an owner | Yes | — | — | — | — |
| Create, list and revoke management API keys | Yes | Yes | — | — | — |
| Change the organization name, approval expiry and agent disclosure ceiling | Yes | Yes | — | — | — |
| Change the observe settings (maximum hours, live environment allowed) | Yes | — | — | — | — |
| Set the organization's principal identity | Yes | — | — | — | — |
| Change the plan (checkout, Creem's customer portal) | Yes | — | — | — | — |
| Leave the organization | Yes | Yes | Yes | Yes | Yes |
K-Block does not offer organization deletion in this version: there is no API route and no dashboard control for it.
Fine-grained rules
The matrix gives the coarse picture. A few rules depend on what is being changed, not only on who changes it.
Developers draft, owners and admins put into service
Anything that changes what a policy or a delegation decides on needs an owner's or admin's consent:
- Tools. A developer can create tools, but they are always created disabled, as drafts. Asking to create one enabled is refused with
403 ADMIN_REQUIRED. Only an owner or admin can enable a tool or authorize its upstream binding. While a tool is enabled, a developer cannot change its action, exposed name, amount mapping, currency pointer or description; disable it first. A developer can still disable an enabled tool, and can edit its input schema. Editing the schema of an enabled tool changes its binding, so the Gateway hides the tool and refuses its calls withTOOL_REAUTHORIZATION_REQUIREDuntil an owner or admin re-authorizes it. - Agents. A developer can create an agent with any policy and edit its name, description, status and KID, but switching an existing agent to a different policy needs an owner or admin.
- MCP servers. A developer can change the URL, server KID or credential of a server only while none of its tools is enabled. When an owner or admin changes them, the server's enabled tools need re-authorization before they can be called again.
- Policies. A developer can write drafts, set or clear the shadow version, edit examples and save simulations. Activating a version, rolling back and the emergency stop are owner and admin actions.
For the tool and agent rules, and for activation, rollback, emergency stop and disclosure, K-Block checks your role again at the moment it saves the change. If you are demoted while a slow request is still running, the change is refused.
Who may approve
Deciding an approval needs all of the following, checked when you submit the decision:
- Your role is Owner, Admin or Approver. Developers and viewers can never decide.
- You are signed in. Management API keys can never decide.
- The policy rule that asked for approval admits you, either by your role or by your user ID. Every
require_approvalrule must name its approvers. When no rule matches and the policy's default isrequire_approval, all three approval roles are admitted. - You sign with a K-Block identity (KID) that is bound to your account, is not revoked, and was already listed as an approver when the request was created.
Consequences worth knowing:
- Owners and admins are not automatically approvers. A rule that lists only the
approverrole refuses an owner. - A promotion after the request was created does not add you: your KID is not on the request. A demotion below an approval role removes your right immediately, because the role is read again.
- An identity you bind after the request was created is not on the request either.
- Every enabled member the rule admits who has an active identity is listed on the request, with at most 32 KIDs in total. When the admitted members hold more than 32 identities, each member keeps at least their newest one, but not every identity is listed. If nobody matches, the call is denied with
NO_APPROVERS; if more than 32 members match, withTOO_MANY_APPROVERS. - K-Block has no separation-of-duties rule in this version. Nothing stops the admin who activated a policy, or the owner who signed the agent's delegation, from approving a request the rule admits them to.
An approval request's page in the dashboard uses the server's own eligibility answer for that request, so it shows a decision control only when you can decide. See Review and decide.
The last owner
An organization must always keep at least one enabled owner:
- Only an owner can grant the owner role, change an owner's role or remove an owner. An admin who tries gets
403 OWNER_REQUIRED. - The last enabled owner cannot be demoted, removed or leave. The request is refused with
409 LAST_OWNER. A disabled owner account does not count as a remaining owner. A disabled account shows a Disabled badge on Members; accounts are disabled by K-Block, not from the dashboard or through the Cloud API. - To hand over ownership, make the new person an owner first, then change your own role or leave.
On the Members page, the last enabled owner's role is shown as plain text, and their own row says "Make another member owner before leaving." instead of offering Leave. The page can only tell once every page of members is loaded; if a change still reaches the server, it is refused with 409 LAST_OWNER and the page shows "The member change was refused".
Admins have no special protection from each other: an admin can promote a member to admin and can demote or remove another admin.
Who signs delegations and cancellations
A delegation authorizes the Gateway to act for an agent; a cancellation stops an action that is pending approval or approved but has not run yet. Both are signed in the browser with the organization's principal key, and the server verifies the signature against the organization's principal identity.
- Only an Owner can set up the organization's principal identity.
- Submitting or revoking a delegation and cancelling an action need the Owner or Admin role and a signed-in session. In practice the person also needs their own copy of the principal key in their browser. To hand it over, an owner exports a key backup that contains the principal, and the admin or other owner imports it in their own browser, signed in to their own account. A copy that another account stored in the same browser profile is not used for them.
- A removal, or a demotion below admin, does not take back a copy of the key. Such a person can no longer submit delegations, revocations or cancellations themselves (an owner demoted to admin still can), but their copy still signs as the organization: outside K-Block those signatures verify, and until the principal is replaced K-Block accepts them from anyone who is an owner or admin, including someone they give the copy to. If that matters, an owner replaces the principal (see Settings).
See Identities and KIDs and Delegations.
What removal and demotion withdraw
When a member is removed, leaves, or is demoted, K-Block withdraws what they can no longer hold, as part of the same change:
| Change | API keys they created | Webhook endpoints they created | Open invitations they sent |
|---|---|---|---|
| Removed, or left | All revoked | Disabled | Revoked |
| New role is developer | Management keys revoked; gateway keys kept | Kept | Revoked (if they were an owner or admin) |
| New role is approver or viewer | All revoked | Disabled | Revoked (if they were an owner or admin) |
| Owner becomes admin, or the reverse | Kept | Kept | Kept |
Each revocation and each disabled endpoint is recorded in the audit log with the reason.
API keys also stop working on their own if their creator loses the role needed to create them, because the creator is checked at every use (see API keys).
Management API key scopes
A management API key acts for scripts, not people. What it may do comes from its scopes, never from a role, and it can only reach the organization it belongs to. It works only while the person who created it is still an owner or admin (see API keys).
| Scope | What it allows |
|---|---|
read | The read routes: organization, principal identity, agents, delegations, observe windows, tools, MCP servers, policies, policy analysis, dry runs, actions, overview, usage and billing status |
approvals:read | List and read approval requests (the read scope does not include them) |
receipts:read | List and read receipts, their evidence bundles and decision checks (the read scope does not include them) |
agents:write | Create and edit agents (not switch their policy), end observe windows |
tools:write | Manage MCP servers and create or edit tools, with the same limits as a developer (drafts only) |
policies:write | Create policies and draft versions; set or clear the shadow version; edit examples; save simulations |
A write scope never lets a key do what a developer cannot. These are always refused for management keys, whatever their scopes: deciding approvals, cancelling actions, submitting or revoking delegations, activating, rolling back or emergency-stopping policies, starting observe windows, changing disclosure, anything about members, invitations, API keys or webhooks, reading the audit log, changing organization settings, setting the principal identity and changing the plan.
A key from another organization gets 404. A key without a needed scope gets 403 FORBIDDEN with details.required_scope. A key used on a route keys can never use gets 403 FORBIDDEN with the message "API keys cannot do this; sign in instead" or "this endpoint requires a signed-in user".
Refusals you may see
| Response | What it means | What to do |
|---|---|---|
404 (NOT_FOUND) on an organization route | You are not a member of that organization, or the key belongs to another one | Check the organization ID and that you are signed in with the right account |
403 FORBIDDEN with details.role | Your role lacks the permission | Ask an owner or admin to do it, or to change your role |
403 FORBIDDEN with details.required_scope | The management key lacks that scope | Create a key with the scope (keys cannot be edited), then revoke the old one |
403 ADMIN_REQUIRED | The change puts something into service or changes what a policy decides on | An owner or admin must make it |
403 OWNER_REQUIRED | The change involves the owner role or the observe settings | An owner must make it |
409 LAST_OWNER | It would leave the organization without an enabled owner | Make another member owner first |
See Error codes for the full catalogue.