admin

List Identity Cases

The collision queue: cases waiting on a human decision, oldest first.

status and reason_code are ENUMS, so a value outside them is a 422 rather than an empty page. Typed as a free string, status answered a misspelling with "no cases", which on a queue reads as "the queue is clear" — the one wrong answer an operator has no reason to question.

reason_code narrows in SQL, before the limit applies: filtering a mixed page client-side would hide one kind of case behind whatever else happened to fill the limit.

This is the route that discloses the captured address, so it is the route that pays for it. no_store keeps a cross-tenant page of addresses out of every shared cache, and one platform read-audit row is COMMITTED before any content is returned — the writer propagates its failures, so a queue this process could not record is a queue it does not serve. The row is written on every request, including the empty page: a recorder that fired only when an address came back would leave "nobody looked" and "the reader looked and the queue was clear" as the same silence.

get/v1/admin/identity-cases

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
  • Auth: HTTP bearer

Query parameters

status'proof_pending' | 'approval_pending' | 'ready' | 'completed' | 'denied' | 'expired'

Lifecycle of an identity_binding_cases row (status_code).

Legal transitions are pinned by the case repository's CAS transition graph.

Filter to one status; default is the open queue.

reason_code'subject_collision' | 'password_origin_collision' | 'invitation_collision' | 'identity_link' | 'revoked_reinstatement' | 'support_recovery' | 'cutover_carry'

Why an identity_binding_cases row exists (reason_code).

Filter to one case kind; default is every kind in the queue.

limitinteger

Response

Successful Response

idstring uuid required
status_codestring required
reason_codestring required
target_tenant_idstring uuid nullable required
candidate_user_idstring uuid nullable required
created_atstring date-time required
expires_atstring date-time required
has_approved_manifestboolean required

Whether this case carries a decision that commit would accept: both the stored document and its digest are present.

issuerstring nullable
subjectstring nullable
subject_scopestring nullable
platform_team_idstring nullable
platform_actor_idstring nullable
expected_credential_epochinteger nullable
incoming_emailstring nullable
candidate_display_namestring nullable

Changes

No recorded changes to this operation across all 1 revision of this API.