# social.coves.community.removal

> Published by [coves.social](https://lexicon.garden/identity/did:web:coves.social)

✓ This is the authoritative definition for this NSID.

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:web:coves.social/social.coves.community.removal)
- [Documentation](https://lexicon.garden/lexicon/did:web:coves.social/social.coves.community.removal/docs)
- [Examples](https://lexicon.garden/lexicon/did:web:coves.social/social.coves.community.removal/examples)

## Definitions

### `social.coves.community.removal`

**Type**: `record`

A community's record that a post has been removed from it. Written in the same com.atproto.repo.applyWrites commit that deletes the social.coves.community.acceptance, so the firehose never carries a half-completed moderation action. Removal is URI-scoped and terminal: it applies to the post URI across later author edits, not only to the version it pins. A post rejected at submission time was never accepted and writes no record. Removed is exited only by an explicit moderator restore: an atomic commit deleting the removal record and writing a fresh acceptance. The record key is deterministic: the unpadded lowercase base32 encoding of the SHA-256 digest of the canonical subject AT-URI (fixed 52 characters, always rkey-safe), so each post has exactly one removal rkey per community and re-removal updates the same record.

**Key**: `any`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `code` | `string` | Yes | Machine-readable reason for the removal. knownValues is an open set: federated peers may send codes this AppView has not seen yet and their records must still validate, so this MUST NOT become an enum. |
| `createdAt` | `string` (datetime) | Yes | Timestamp when the post was removed |
| `reason` | `string` | No | Human-readable explanation of the removal, shown to the author and in the moderation log |
| `subject` | `ref` → `com.atproto.repo.strongRef` | Yes | Strong reference to the removed post. The pinned CID is audit metadata recording the version present at removal time; the removal itself applies to the post URI. |

## Raw Schema

```json
{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "main": {
      "description": "A community's record that a post has been removed from it. Written in the same com.atproto.repo.applyWrites commit that deletes the social.coves.community.acceptance, so the firehose never carries a half-completed moderation action. Removal is URI-scoped and terminal: it applies to the post URI across later author edits, not only to the version it pins. A post rejected at submission time was never accepted and writes no record. Removed is exited only by an explicit moderator restore: an atomic commit deleting the removal record and writing a fresh acceptance. The record key is deterministic: the unpadded lowercase base32 encoding of the SHA-256 digest of the canonical subject AT-URI (fixed 52 characters, always rkey-safe), so each post has exactly one removal rkey per community and re-removal updates the same record.",
      "key": "any",
      "record": {
        "properties": {
          "code": {
            "description": "Machine-readable reason for the removal. knownValues is an open set: federated peers may send codes this AppView has not seen yet and their records must still validate, so this MUST NOT become an enum.",
            "knownValues": [
              "rule-violation",
              "spam",
              "off-topic",
              "illegal-content",
              "author-banned",
              "moderator-discretion"
            ],
            "maxLength": 64,
            "type": "string"
          },
          "createdAt": {
            "description": "Timestamp when the post was removed",
            "format": "datetime",
            "type": "string"
          },
          "reason": {
            "description": "Human-readable explanation of the removal, shown to the author and in the moderation log",
            "maxGraphemes": 1000,
            "maxLength": 10000,
            "type": "string"
          },
          "subject": {
            "description": "Strong reference to the removed post. The pinned CID is audit metadata recording the version present at removal time; the removal itself applies to the post URI.",
            "ref": "com.atproto.repo.strongRef",
            "type": "ref"
          }
        },
        "required": [
          "subject",
          "code",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "social.coves.community.removal",
  "lexicon": 1
}
```
