---
title: "Deny Identity Case"
method: POST
path: "/v1/admin/identity-cases/{case_id}/deny"
tags: ["admin"]
---

# Deny Identity Case

`POST /v1/admin/identity-cases/{case_id}/deny`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/admin/identity-cases/{case_id}/deny`
- Auth: HTTP bearer

Refuse the collision. The person stays blocked, which is the safe outcome of a real conflict.

## Path parameters

- `case_id` string, uuid, required

## Response `200`

Successful Response

- CaseRow: One case in the operator queue: the identifiers, plus what a human needs to recognise them. The identifiers are the record and the label beside them is orientation. The candidate's name is optional and mutable — an account is deleted and its name goes with it — so it is served next to the stable id it describes rather than in place of it, and a missing label says so instead of rendering blank. **This row carries the captured address, and that reverses an earlier decision.** It used to serve only a boolean saying whether that address matched the candidate's, on the reasoning that this queue spans every workspace and an address is the one field identifying somebody outside our own identifier space. That reasoning is sound and it was overruled on 2026-08-24: without the address an operator cannot answer the question the screen exists to ask, so the queue served six opaque ids and no way to act on them. The disclosure carries its own cost instead — the list route sets ``no_store`` and commits a platform read-audit row before any address is returned.
  - `id` string, uuid, required
  - `status_code` string, required
  - `reason_code` string, required
  - `target_tenant_id` string, uuid, nullable, required
  - `candidate_user_id` string, uuid, nullable, required
  - `created_at` string, date-time, required
  - `expires_at` string, date-time, required
  - `has_approved_manifest` boolean, required: Whether this case carries a decision that commit would accept: both the stored document and its digest are present.
  - `issuer` string, nullable
  - `subject` string, nullable
  - `subject_scope` string, nullable
  - `platform_team_id` string, nullable
  - `platform_actor_id` string, nullable
  - `expected_credential_epoch` integer, nullable
  - `incoming_email` string, nullable
  - `candidate_display_name` string, nullable

## Other responses

- `422`: Validation Error

---

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