revoke_delegation
Revoke one delegation while keeping its domain proof and sibling delegations valid. Mirrors the revocation to the proof registry so CRL, status list and status lookup reflect it; repeats succeed.
Instructions
Revoke ONE delegation. The domain control proof and sibling delegations stay valid; the revocation is mirrored into the proof registry so the CRL, status list and public status lookup all see it. Idempotent: a repeat revoke answers success with the same body, both here and through revoke_proof with the ph_dlg_ handle — unlike a PROOF, where a repeat answers already_revoked. The result carries the DERIVED effective_status/is_valid beside the stored status.
ACCESS: needs a Proof account. Set PROOF_API_KEY and restart this server, then call this tool again. start_login does NOT open this tool.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Delegation ID (24-hex Mongo id or ph_dlg_<32 hex> handle) | |
| reason | No | Reason for revocation |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | MongoDB ObjectId | |
| scope | No | Deprecated. Delegation schema 2.0 carries no scope; this array stays for the SDKs released before it: the scope a delegation issued before schema 2.0 was stored with, otherwise empty. Removed in the next major version. | |
| status | No | The owner's OWN record — whether they revoked this delegation themselves. Nothing else writes it: neither the control proof dying nor this delegation's own lifetime running out. Liveness is DERIVED and reported separately as `effective_status`. This stored field is also what `?status=` filters on | |
| delegate | No | Typed delegate identifier | |
| is_valid | No | True only when `effective_status` is `active`. It is a restatement of that field, not a second opinion: expiry is decided once, inside the derivation above | |
| issued_at | No | ||
| principal | No | The proven domain that authorized the delegate — derived from the control proof, never client input | |
| created_at | No | ||
| expires_at | No | Never later than the control proof's own expiry at issuance (effective expiry is min of the two) | |
| revoked_at | No | ||
| environment | No | ||
| control_proof | No | The control proof handle this delegation points down to | |
| delegation_id | No | Stable public handle (`ph_dlg_<32 hex>`) — also the token's `sub`, and accepted by the proof status endpoint | |
| revoked_reason | No | ||
| effective_status | No | DERIVED liveness, computed at read time from BOTH clocks that govern a delegation: the control proof it stands on (cascade rule a — revoked, suspended or expired flows through) and its own `expires_at` (rule b — effective expiry is the earlier of the two). Either one running out reports `expired` here while the delegation's own `status` stays untouched. This is the field to render — `status` alone would show a live badge on a delegation every verifier already rejects |