# Record what each AI agent may do. Revoke it with a signed, dated record.

From November 24, 2026, Wells Fargo's Online Access Agreement deems an AI agent's instructions and transactions authorized by the customer, and says the customer "must retain evidence of such revocation and must provide such evidence to us, at our request" (Section 15(f)). Other providers block outside agents until they can tell who authorized what. Either way, the principal needs a record of what each agent was allowed to do and when that ended.

## 1. Record the grant

For each outside agent: what it can reach (an account, a system), who authorized it, what it may do in plain words, any limits, and when the permission starts and ends. Rightshold records it as a receipt on your workspace's Agent access stream, committed to the public ledger, and returns a signed grant record.

## 2. Tag what the agent does

When you record the agent's actions on any stream, add the tag grant:<id>. Rightshold checks each tagged action against the grant: recorded before it began, after it expired, or after it was revoked, and counts those in the grant's view and in every signed statement.

## 3. Revoke, and keep the proof

Remove the access with the provider, then record the revocation: the reason, and optionally the provider's confirmation reference and when you told them. Rightshold returns a signed revocation record naming the exact grant it ends, timestamped by its own clock and committed to the public ledger.

## 4. Hand it over when asked

A bank, an auditor or an insurer can check either record without an account: the SHA-256 of the canonical document and the Ed25519 signature, against keys published at /.well-known/rightshold-keys.json, or with one call to the verify endpoint.

## The API

### Record a grant

```
POST https://www.rightshold.com/v1/operations/workspaces/{workspace_id}/access-grants
Authorization: Bearer <api key>
{"agent_label": "Personal finance agent", "resource": "Operating account ending 4410",
 "grantor": "Controller", "scope": "Pay approved vendor invoices; read balances.",
 "limits": {"max_amount": 2500, "currency": "USD", "per": "day"}, "expires_at": "2027-01-31T00:00:00Z"}
```

### Revoke it

```
POST https://www.rightshold.com/v1/operations/workspaces/{workspace_id}/access-grants/{grant_id}/revoke
{"reason": "Agent replaced", "provider_reference": "Bank confirmation 77-1203"}
```

### Was it in force at a given moment?

```
POST https://www.rightshold.com/v1/operations/workspaces/{workspace_id}/access-grants/{grant_id}/check
{"at": "2026-12-02T15:04:00Z"}
```

### Python

```
# https://www.rightshold.com/sdks/rightshold_operations.py (standard library only; the key comes from RIGHTSHOLD_API_KEY)
from rightshold_operations import RightsholdAccess
access = RightsholdAccess("opw_...")
grant = access.record_grant("Personal finance agent", "Operating account ending 4410", "Controller", "Pay approved invoices")
revocation = access.revoke_grant(grant["grant"]["id"], "Agent replaced", provider_reference="Bank confirmation 77-1203")
```

### From an agent, over MCP

```
Connect to https://www.rightshold.com/mcp?toolset=operations with your account key as a Bearer token:
record_access_grant, revoke_access_grant, check_access_grant and verify_access_record
```

### Verify a record (no account)

```
POST https://www.rightshold.com/v1/operations/access-grants/verify
{"document": <revocation record>, "grant": <grant record>}
```

Or use the Agent access tab in the operations console: https://www.rightshold.com/operations

## What the records do not prove

- A revocation record proves when the revocation was recorded with Rightshold. It does not prove when the provider acted on it, and it does not end the access by itself.
- The provider reference and notification time are your own statements, recorded as you gave them.
- A grant records what you declared about the agent's permission, not what the provider configured.
- Not legal advice. Read your own agreement.

The eight-question readiness check: https://www.rightshold.com/agent-accountability
