- Action: a reusable policy template you publish. It defines the parameters and rules.
- Mandate: a signed credential the user issues against an action, pinning the values they approve.
- Verifiable Presentation (VP): a short-lived proof the agent derives from the mandate for a single verification.
- Verify: Humanos checks the VP and evaluates the agent’s requested execution against the user-approved rules, returning allow or deny.
The user approves the mandate once. The agent then verifies every action against it, with no repeated user prompts. Revoke the mandate and every future action is denied.
1. Define and publish an action
Actions are authored and published in the dashboard; they’re read-only over the API. An action’s content has these parts:
A rule looks like
executionParams.amount <= userParams.maxAmount. Publishing computes an integrity digest, the digestSRI, and freezes that version. Mandates always reference the exact version they were issued against, so republishing never changes an existing mandate.
Copy the published action’s id, urn:via:action:<uuid>. You’ll reference it when requesting mandates.
2. Request a mandate
Ask a user to grant a mandate withPOST /request, using a credential of type: POLICY that references the action and the userParams the user is approving.
string
required
Must be
POLICY for a mandate. A POLICY credential carries an action and no data.object
required
string[]
DIDs allowed to derive VPs from, and verify, the resulting mandate, typically your agent’s DID. The requester’s own DID is always included.
credential webhook event. Persist the mandate URN, urn:via:credential:<uuid>. It’s the durable handle the agent uses from here on.
3. Agent issues a VP
When the agent is about to act, derive a fresh, short-lived Verifiable Presentation from the mandate. Issue a new one per verification.string
The verifier’s domain. When set, the VP is bound to that audience via
proof.domain and a single-use challenge nonce, valid for about 5 minutes. Omit for
an unbound VP, which instead relies on the verifier’s DID being in the
mandate’s authorizedDIDs.presentation, presentationEncoded as base64, and a signed receipt. The caller’s DID must be authorized on the mandate, or issuance is denied.
4. Verify
Send the VP plus the agent’sexecutionParams to the verify endpoint. Humanos runs the full pipeline: signature, status, validity window, audience binding, executionParams validation, then the action’s CEL rules.
string
The base64 VP from step 3. Takes precedence over
presentation if both are sent; at least one is required.object
default:"{}"
What the agent wants to do. Field names must match the action’s declared
executionParams and are referenced in rules as executionParams.<field>.201 Allow
string
required
Always
allow.string
required
URN of the mandate that was verified.
object[]
required
Per-rule results, each
{ rule, result: "pass" | "fail" | "error", reason? }.object
required
Signed
VERIFICATION_APPROVED receipt.403 Deny
string
required
Always
deny.string
required
Machine-readable denial reason; see the table below.
number
required
403.string
required
Verification denied: <reason>.string
required
URN of the mandate that was evaluated.
object[]
required
Per-rule results, populated when a rule failed.
object
required
Signed
VERIFICATION_DENIED receipt.A
403 with rule_failed is a legitimate policy outcome, not an error: the agent asked to do something the user didn’t authorize. Inspect evaluations to see which rule blocked it.5. Revoke a mandate
To retire a mandate, whether the user withdraws consent or the underlying rule changes, revoke it. Afterwards, VP issuance and verification both fail withcredential_revoked, so any VP an agent still holds stops working.
string
Optional label, max 200 chars, recorded on the credential and the revocation
receipt.