---
title: "Delete a draft"
summary: "Drop an uploaded draft from memory once its review is collected."
category: "developer"
tags: ["attest", "reference", "draft", "delete"]
updated: "2026-09-14T04:25:14.191Z"
url: "https://support.quorumtech.ch/articles/attest-delete-draft"
markdown: "https://support.quorumtech.ch/articles/attest-delete-draft.md"
---

# Delete a draft

`DELETE https://api.quorumtech.ch/attest/v1/drafts/{draftId}`

Drop an uploaded draft.

Call this once the review is collected and the report is written. Drafts expire on their own after six hours, but a draft is unpublished writing, and there is no reason for it to stay resident a moment longer than the work needs.

Deleting a draft that is already gone returns `deleted: false` with a 200, so a retried cleanup never fails. Deleting a draft while its review is still running makes the review fail with `inputs_deleted`, so collect the result first.

## Request

Path parameters:

| Parameter | Description |
| --- | --- |
| `draftId` | The id returned when the draft was uploaded. |

## Example request

```bash
curl -X DELETE "https://api.quorumtech.ch/attest/v1/drafts/<draftId>" \
  -H "Authorization: Bearer $QUORUM_API_KEY"
```

## Responses

### 200

Whether a draft with that id was there to delete.

| Field | Type | Description |
| --- | --- | --- |
| `draftId` | string |  |
| `deleted` | boolean |  |

## Errors

The body is `{ "error": { "code", "message" } }`; the full catalogue with what to do about each code is on the Errors page.

| Status | Codes | When |
| --- | --- | --- |
| 401 |  | The key is missing, not recognised, or revoked. |
| 402 | `payment_required`, `credits_exhausted`, `remaining`, `needed` | The workspace has no active API subscription (`payment_required`), or is prepaid and has no credits left for this request (`credits_exhausted`, with `remaining` and `needed`). Manage billing and add credits at https://developer.quorumtech.ch/billing. |
| 403 |  | The key is not scoped to Attest. |
| 429 | `rate_limited`, `claims_rate_limited`, `claim_budget_exhausted`, `monthly_cap_reached`, `cap` | Over the key's requests-per-minute limit (`rate_limited`), its claims-per-minute ceiling (`claims_rate_limited`), its claims-per-day budget (`claim_budget_exhausted`), or, for a postpaid workspace, its monthly credit cap (`monthly_cap_reached`, with `cap` and `resetsAt`). `Retry-After` says when to try again; the daily budget resets at midnight UTC and the cap on the first of the month. |

## Cost

Free.
