---
title: "Unsuspend proof"
method: POST
path: "/api/v1/proofs/{id}/unsuspend"
tags: ["Proofs"]
---

# Unsuspend proof

`POST /api/v1/proofs/{id}/unsuspend`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/proofs/{id}/unsuspend`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `auth_token`

Lift a suspension. Only a suspended proof flips back to active — a proof revoked while suspended stays revoked, and a handle whose own row is not the paused one answers `not_suspended`. Reachable with an API key (`proofs:write`) or a dashboard session cookie; the scope binds API-key callers only. Unsuspending a DELEGATION handle (`ph_dlg_*`) additionally requires `delegations:write`, like suspending and revoking one — lifting a pause an owner placed is itself an act on a published artifact.

## Path parameters

- `id` string, required: Public proof handle (`ph_ctl_<32 hex>` for a domain control proof, `ph_dlg_<32 hex>` for a delegation) or verification id

## Response `200`

Suspension lifted

- SuspendProofResponse: Result of a suspend/unsuspend transition (m-proof-status-list)
  - `proof_id` string, required: Public proof handle (`ph_ctl_<32 hex>`)
  - `status` 'suspended' | 'active', required: `suspended` after a suspend, `active` after an unsuspend
  - `suspended_at` string, date-time, nullable, required: When the suspension began; null after an unsuspend
  - `status_list_uri` string, required: The Token Status List where this change is published

## Other responses

- `400`: Proof is not suspended
- `403`: `account_key_required` — a key bound to one sub-account cannot change the proof of a shared asset (a phone, email or domain asset, a delegation, or a domain control proof of one of the account's own domains or with live delegations under it); it can read its status. Any other domain proof of its own sub-account — a customer's domain verified through its key — it may change. A proof of another sub-account answers 404. For an API-key caller, acting on a delegation handle (`ph_dlg_*`) requires the `delegations:write` scope on top of the route's own `proofs:write` (`insufficient_scope`) — a pause takes the delegation offline for every verifier while it holds, so it is gated exactly as its revocation is. For a JWT dashboard session, the same act instead requires a live `delegation_lifecycle` 2FA step-up grant (`403 2fa_required` — start one via `POST /me/2fa/start` with `action_type: delegation_lifecycle`).
- `404`: Proof not found

---

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