> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dokstamp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Revoke a Certificate

> Permanently revoke an issued certificate and publish a revocation notice on its verification URL.

# Revoke a Certificate

Revocation permanently marks a certificate as invalid. The revocation is visible on the public verification URL, including the reason and timestamp.

<Warning>
  Revocation is **irreversible**. A revoked certificate cannot be reinstated. If a certificate was revoked in error, you must issue a new one.
</Warning>

***

## Revoke

```http theme={null}
PUT /certificates/{uuid}/revoke
```

| Parameter           | Type   | Required | Description                                   |
| ------------------- | ------ | -------- | --------------------------------------------- |
| `revocation_reason` | string | No       | Human-readable explanation for the revocation |

<CodeGroup>
  ```bash cURL theme={null}
  curl -X PUT "https://api.dokstamp.com/certificates/a1b2c3d4-e5f6-7890-abcd-ef1234567890/revoke" \
    -H "Authorization: Bearer {TOKEN}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "X-Tenant: {TENANT}" \
    -d '{
      "revocation_reason": "Issued in error — student did not complete all required modules."
    }'
  ```

  ```javascript JavaScript theme={null}
  await fetch(`https://api.dokstamp.com/certificates/${uuid}/revoke`, {
    method: 'PUT',
    headers: {
      'Authorization': `Bearer ${TOKEN}`,
      'Accept': 'application/json',
      'Content-Type': 'application/json',
      'X-Tenant': TENANT,
    },
    body: JSON.stringify({
      revocation_reason: 'Issued in error — student did not complete all required modules.',
    }),
  });
  ```
</CodeGroup>

**Response `200`:**

```json theme={null}
{
  "data": {
    "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "status": "revoked",
    "revoked_at": "2025-03-01T10:30:00.000000Z",
    "revocation_reason": "Issued in error — student did not complete all required modules.",
    "public_verification_url": "https://verificar.dokstamp.eu/a1b2c3d4"
  }
}
```

***

## What happens after revocation

* `status` changes to `revoked`
* `revoked_at` is set to the current timestamp
* The `public_verification_url` remains accessible and displays a revocation notice
* The certificate is excluded from active certificate counts and reports
* The original PDF file remains in storage

***

## Common revocation reasons

* Student did not meet graduation requirements
* Certificate issued with incorrect student data
* Academic fraud discovered after issuance
* Administrative error during batch issuance

***

## Related

* [Certificate Lifecycle](/en/core-concepts/certificate-lifecycle) — full status flow
* [Issue a Certificate](/en/api-reference/certificates/overview) — create a replacement certificate
