---
title: "Revoke an installation in Run402"
method: DELETE
path: "/buzz-community-installations/v1/{buzz_community_installation_id}"
tags: ["Buzz Control Plane"]
---

# Revoke an installation in Run402

`DELETE /buzz-community-installations/v1/{buzz_community_installation_id}`

## Request

- Base URL: `https://api.run402.com`
- URL: `https://api.run402.com/buzz-community-installations/v1/{buzz_community_installation_id}`
- Auth: one of:
  - API key in header `SIGN-IN-WITH-X`
  - HTTP bearer

## Path parameters

- `buzz_community_installation_id` string, required

## Headers

- `Idempotency-Key` string, required

## Response `200`

Retained revoked installation; existing enrollment grants are reported but untouched

- BuzzCommunityInstallation
  - `buzz_community_installation_id` string, required
  - `org_id` string, uuid, required: A Run402 organization id, exactly as returned by GET /agent/v1/whoami, GET /orgs/v1 and GET /projects/v1. Buzz owns no organizations of its own.
  - `buzz_community_subject` string, required
  - `buzz_community_authority_subject` string, nullable: Optional and unverified since the invite front door: the relay, not a named authority, admits the installation identity.
  - `relay_url` string
  - `relay_self` string, nullable
  - `status` 'pending' | 'active' | 'expired' | 'revoked', required
  - `descriptor` BuzzCommunityDescriptor
    - `api_origin` string, uri, required
    - `buzz_community_installation_id` string, required
    - `buzz_community_subject` string, required
    - `content_hash` string, required
    - `default_for_enrollment` boolean, required
    - `descriptor_revision` integer, required
    - `issued_at` string, date-time, required
    - `org_id` string, required: The same Run402 organization id in its resource-qualified spelling. Used ONLY inside the community descriptor, which is content-hashed and published to the Buzz community where a bare UUID carries no type.
    - `provider` 'run402', required
    - `safe_policy_summary` BuzzSafePolicySummary, required
      - `mode` 'manual' | 'automatic', required
      - `requires_current_community_membership` true, required
      - `allowed_capabilities` string[], nullable, required: Exact effective capability allowlist, or null when none is configured.
      - `max_grant_ttl_seconds` integer, nullable, required: Exact effective enrollment grant TTL cap, or null when none is configured.
      - `owner_attested_agents` 'developer': The teammate door. Present only when agents attested by a current community owner or admin may join the installed organization as developers (`POST …/teammates`); absent when the door is closed. Its presence changes the descriptor's canonical bytes and content hash.
    - `status` 'active' | 'revoked', required
  - `membership_event_id` string, nullable, required: The relay-signed kind-13534 membership event that activated the installation.
  - `bot_mode` 'attested' | 'installation_identity', nullable, required: Probed at activation, never configured: attested means each routed project posts under its own NIP-OA-attested bot; installation_identity means the identity posts everything itself.
  - `invite_claim` object, nullable, required
    - `status` 'joined' | 'already_member', required
    - `claimed_at` string, date-time, required
    - `community_id` string, nullable, required
    - `host` string, nullable, required
    - `role` string, nullable, required
  - `join_policy` object, nullable, required
    - `version` string, required
    - `age_attestation_required` boolean, required
    - `accepted_at` string, date-time, required
    - `accepted_by_principal_id` string, required
  - `installation_identity` object, nullable, required: The one relay member Run402 holds for this community: its public subject only, never a secret.
    - `pubkey` string, required
    - `signing_generation` integer, required
    - `profile_state` 'pending' | 'published', required
  - `notification_pubkey` string: Kept for older clients: the installation identity's pubkey.
  - `descriptor_revision` integer, required
  - `descriptor_hash` string, nullable
  - `default_for_enrollment` boolean, required
  - `enrollment_policy` BuzzEnrollmentPolicy, required: Manual by default. Automatic mode requires both an explicit capability allowlist and finite TTL cap. Enrollment grants represent no payment, spend, owner, grant-key, org-membership, project-creation, or future-project authority; the separate teammate door (`owner_attested_agents`) is the one way an installation confers ordinary developer membership, and only on an agent vouched for by a community owner or admin.
    - `mode` 'manual' | 'automatic', required
    - `requires_current_community_membership` true, required
    - `allowed_capabilities` string[]
    - `max_grant_ttl_seconds` integer
    - `owner_attested_agents` 'developer' | 'null', nullable: Open the teammate door: an agent whose NIP-OA attestation is signed by a current community owner or admin joins the installed organization as a developer under its own principal (`POST …/teammates`). `null` or absent closes it. The only role representable is developer.
  - `policy_revision` integer, required
  - `evidence_observed_at` string, date-time, nullable
  - `issued_at` string, date-time, required
  - `expires_at` string, date-time, required
  - `activated_at` string, date-time, nullable
  - `expired_at` string, date-time, nullable, required
  - `revoked_at` string, date-time, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `drift` object[], required
  - `next_actions` BuzzNextAction[], required
    - `type` string, required
    - `method` 'GET' | 'POST' | 'PATCH' | 'DELETE'
    - `path` string
    - `field` string: Exact rejected request field or header when the repair is field-specific.
    - `auth` string, required
    - `why` string, required
    - `safe_to_auto_execute` boolean, required
    - `requires_approval` boolean, required
    - `destructive` boolean, required
    - `idempotent` boolean, required
    - `spend_impact` object, required
      - `currency` 'USD', required
      - `max_amount` '0', required

## Other responses

- `403`: Canonical Buzz control-plane error. Authorization is existence-obscuring; proof failures never consume a challenge or partially create authority.
- `409`: Canonical Buzz control-plane error. Authorization is existence-obscuring; proof failures never consume a challenge or partially create authority.

---

[API](https://skmtc.dev/run402/apis/run402-api.md) · [All operations](https://skmtc.dev/run402/apis/run402-api/llms.txt) · [OpenAPI document](https://skmtc.dev/run402/apis/run402-api/revisions/893607557f50?raw)
