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.
Input
application/jsonvalue
string
Required
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.
maxLength: 2048 bytesOutput
application/jsonkind
string
Required
The kind the entry had.
did, aturi, pds, cidrestoration
string
Required
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.
backfillOnView, refetchEnqueued, immediatevalue
string
Required
The value as stored.
Errors
NotDenied
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. AdminDisabled
No administrative credential is configured, so the administrative surface does not exist. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"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."
}