app.bulleted.admin.undeny

lexicons.bulleted.app

{
  "id": "app.bulleted.admin.undeny",
  "defs": {
    "main": {
      "type": "procedure",
      "input": {
        "schema": {
          "type": "object",
          "required": [
            "value"
          ],
          "properties": {
            "value": {
              "type": "string",
              "maxLength": 2048,
              "description": "The value to remove. Normalized the same way it was on the way in, so a PDS endpoint written with a trailing slash still matches."
            }
          }
        },
        "encoding": "application/json"
      },
      "errors": [
        {
          "name": "NotDenied",
          "description": "The value is not on the denylist. Distinguished from success on purpose: 'it was already removed' and 'you typed it differently from the way it was stored' are otherwise indistinguishable to the caller."
        },
        {
          "name": "AdminDisabled",
          "description": "No administrative credential is configured, so the administrative surface does not exist."
        }
      ],
      "output": {
        "schema": {
          "type": "object",
          "required": [
            "value",
            "kind",
            "restoration"
          ],
          "properties": {
            "kind": {
              "type": "string",
              "description": "The kind the entry had.",
              "knownValues": [
                "did",
                "aturi",
                "pds",
                "cid"
              ]
            },
            "value": {
              "type": "string",
              "description": "The value as stored."
            },
            "restoration": {
              "type": "string",
              "description": "How the content comes back, which depends entirely on the kind. backfillOnView: the repository has zero rows, so the next view is an ordinary first view and backfill returns the content by itself. refetchEnqueued: an aturi undeny, where the repository still has all its other rows and NOTHING would ever trigger a backfill, so a targeted com.atproto.repo.getRecord has been queued. immediate: a cid undeny, where the record was never removed and the blob returns on the next cache miss.",
              "knownValues": [
                "backfillOnView",
                "refetchEnqueued",
                "immediate"
              ]
            }
          }
        },
        "encoding": "application/json"
      },
      "description": "Remove a value from the appview's denylist and rebuild the membership filter. Requires the administrative credential. A denylist with no removal path means one mistyped DID is permanent. Undeny does NOT restore rows a nuke removed; the restoration field says what brings the content back, if anything does."
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

Validate Record

Validate a record against app.bulleted.admin.undeny

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:geqwme5xqva5iasvlrwi4izj
CID
bafyreigzzrvztlc3a6mf5hojcmm4rfp56hkryobpwss7csbzixy2ptet54
Indexed At
2026-08-06 10:44 UTC
AT-URI
at://did:plc:geqwme5xqva5iasvlrwi4izj/com.atproto.lexicon.schema/app.bulleted.admin.undeny

Lexicon Garden

@