Security
Use this page when a call is refused or before you give an API key to a client. It names the checks and the next step. They run on every Surface. Roles and capability bundles, Tags, policy, and field access, and Access reviews and audit own the Governance detail behind them.
Security controls
Every call meets the same three security checks, in the same order. Merulan first checks the credential. It then places the caller in one company and one Workspace. It then asks whether that caller holds the permission the operation names. Nothing runs and nothing changes until all three pass.
A refusal tells you little, and that is deliberate. An expired token, a wrong audience, and a bad signature all return one identical message, so a caller probing the boundary learns nothing about which check fired. More detail would help an attacker.
Security configuration
Two settings decide how far a caller reaches, and both live in the Console. A Workspace administrator sets roles and permissions under Governance → Access Model → Roles. Roles and capability bundles explains the grant boundary. API keys are created and revoked under Settings → Admin → Developers. Access reviews and audit explains their administration. API shows how a key becomes an access token.
A key is a delegation and not a second identity, so it is no security boundary of its own. It acts for one member and narrows that member's permissions rather than adding to them. Widening a key never reaches past the member behind it, and narrowing the member narrows every key they hold.
Revoke a key as soon as its client should stop. Revoking reaches the tokens the key already minted, not only the next exchange, so an outstanding token stops inside its own short life. Keep one key per client, and keep keys out of support notes, examples, and documentation.
Resolve security refusals
A security refusal comes in three kinds, and each one has a different repair.
The first says the credential was not accepted. Exchange the API key again, because the access token expired. API states how long an access token lives. If the exchange itself refuses, the key was revoked, and only a new key repairs it. Sending the raw key to the API host is refused as well, because the exchange happens on the app host.
The second says the caller may not do this. Read the operation page's Permission section, then ask a Workspace administrator for that one permission and no more. A refusal that names the Workspace instead means the caller cannot reach the Workspace the request names. Confirm the Workspace id, then use Workspaces and membership to check whether the member is still in it.
The third says the decision could not be made. Merulan cannot confirm whether the key behind a token is still live, so it refuses rather than admitting the call. Neither a retry nor a new key helps. Wait, then send the call again.
Security assurance
Certification, residency, subprocessors, and response promises can change. The Trust Center holds the live policies, documents, and audit status. The privacy policy names subprocessors and legal terms. Check those sources before a procurement or deployment decision. A copied claim from documentation is not current assurance. Report a vulnerability to security@merulan.com.
Related
Security detail stays with the page that owns each contract:
- Roles and capability bundles owns role grants. Tags, policy, and field access owns purposes and Tags. Access reviews and audit owns the audit evidence.
- API shows how a key becomes a token and lists the refusal bodies for a rejected credential and a missing permission.
- Agents owns the bounds an agent acts under when no person is present.