# app.bulleted.admin.deny

> Published by [ngerakines.me](https://lexicon.garden/identity/did:plc:cbkjy5n7bk3ax2wplmtjofq2)

## Links

- [View on Lexicon Garden](https://lexicon.garden/lexicon/did:plc:cbkjy5n7bk3ax2wplmtjofq2/app.bulleted.admin.deny)
- [Documentation](https://lexicon.garden/lexicon/did:plc:cbkjy5n7bk3ax2wplmtjofq2/app.bulleted.admin.deny/docs)
- [Examples](https://lexicon.garden/lexicon/did:plc:cbkjy5n7bk3ax2wplmtjofq2/app.bulleted.admin.deny/examples)

## Definitions

### `app.bulleted.admin.deny`

**Type**: `procedure`

Add a value to the appview's denylist and, by default, remove what it has already indexed. Requires the administrative credential. Adding to the list stops future indexing; nuking removes what is already there, which is why nuke defaults to true.

#### Input

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `nuke` | `boolean` | No | Remove what is already indexed. True by default and the reason this endpoint exists: adding to the list only stops future indexing. Pass false to pre-emptively block something that has not been indexed yet. |
| `value` | `string` | Yes | What to deny. The kind is DERIVED from this value and is never supplied by the caller: did: is a repository, at:// is one record, http:// or https:// is a PDS endpoint, and a canonical CIDv1 is a blob. A value matching none of the four is a 400 rather than a guess. |
| `comment` | `string` | No | Free-text moderation note. Not the audit field: who performed the action is taken from the administrative credential and recorded separately, because a moderation log has to answer 'who removed this and when' as a queryable field rather than as a convention about comment text. |

#### Output

**Encoding**: `application/json`

| Property | Type | Required | Description |
|----------|------|----------|-------------|
| `kind` | `string` | Yes | The kind derived from the value. |
| `blobs` | `integer` | No | Cached blob files removed. |
| `nuked` | `integer` | Yes | Rows removed from the appview. Zero when nuke was false. |
| `repos` | `integer` | No | Repositories emptied. One for a did nuke; zero or more for a pds nuke. |
| `value` | `string` | Yes | The value as stored. A PDS endpoint is normalized to one spelling, so this may differ from the input. |

#### Errors

- **UnknownKind**: The value is not a DID, an AT-URI, an http(s) endpoint, or a canonical CIDv1.
- **AdminDisabled**: No administrative credential is configured, so the administrative surface does not exist.

## Raw Schema

```json
{
  "id": "app.bulleted.admin.deny",
  "defs": {
    "main": {
      "type": "procedure",
      "input": {
        "schema": {
          "type": "object",
          "required": [
            "value"
          ],
          "properties": {
            "nuke": {
              "type": "boolean",
              "default": true,
              "description": "Remove what is already indexed. True by default and the reason this endpoint exists: adding to the list only stops future indexing. Pass false to pre-emptively block something that has not been indexed yet."
            },
            "value": {
              "type": "string",
              "maxLength": 2048,
              "description": "What to deny. The kind is DERIVED from this value and is never supplied by the caller: did: is a repository, at:// is one record, http:// or https:// is a PDS endpoint, and a canonical CIDv1 is a blob. A value matching none of the four is a 400 rather than a guess."
            },
            "comment": {
              "type": "string",
              "maxLength": 2048,
              "description": "Free-text moderation note. Not the audit field: who performed the action is taken from the administrative credential and recorded separately, because a moderation log has to answer 'who removed this and when' as a queryable field rather than as a convention about comment text."
            }
          }
        },
        "encoding": "application/json"
      },
      "errors": [
        {
          "name": "UnknownKind",
          "description": "The value is not a DID, an AT-URI, an http(s) endpoint, or a canonical CIDv1."
        },
        {
          "name": "AdminDisabled",
          "description": "No administrative credential is configured, so the administrative surface does not exist."
        }
      ],
      "output": {
        "schema": {
          "type": "object",
          "required": [
            "value",
            "kind",
            "nuked"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "description": "The kind derived from the value.",
              "knownValues": [
                "did",
                "aturi",
                "pds",
                "cid"
              ]
            },
            "blobs": {
              "type": "integer",
              "description": "Cached blob files removed."
            },
            "nuked": {
              "type": "integer",
              "description": "Rows removed from the appview. Zero when nuke was false."
            },
            "repos": {
              "type": "integer",
              "description": "Repositories emptied. One for a did nuke; zero or more for a pds nuke."
            },
            "value": {
              "type": "string",
              "description": "The value as stored. A PDS endpoint is normalized to one spelling, so this may differ from the input."
            }
          }
        },
        "encoding": "application/json"
      },
      "description": "Add a value to the appview's denylist and, by default, remove what it has already indexed. Requires the administrative credential. Adding to the list stops future indexing; nuking removes what is already there, which is why nuke defaults to true."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}
```
