# DELETE /api/v1/idempotency-keys/:key

Auth: Bearer

HTML: https://cooperemail.com/docs/reference/release-idempotency-key

## Summary

Release an unknown Idempotency-Key so the same key can be used again. Requires message_send. A stale in_progress row older than 10 minutes is promoted to unknown and then released. The response is {key, released:true}. A done key is HTTP 409 idempotency_key_done and still replays. A fresh in_progress key is HTTP 409 idempotency_request_in_progress. A missing key is HTTP 404 idempotency_key_not_found. An inbox-scoped key for another inbox is HTTP 404 idempotency_key_not_found. MCP: cooper_release_idempotency_key.

## Request

This call has no JSON body.

## Response

The OpenAPI document does not declare a JSON response schema for this call. The summary is the contract.

## Errors

- HTTP 409 idempotency_key_done
- HTTP 409 idempotency_request_in_progress
- HTTP 404 idempotency_key_not_found

The live `message` is the sentence for that code. Branch on `code`.

```json
{
  "error": {
    "type": "conflict",
    "code": "idempotency_key_done",
    "docs_url": "https://cooperemail.com/docs#idempotency_key_done"
  }
}
```

## Idempotency

Idempotency-Key is 1 to 256 characters of letters, digits, and - . _ ~. The same key and the same request within 24 hours returns the original response with HTTP 200 and Idempotent-Replayed: true. A different request is HTTP 409 idempotency_key_conflict. A second call while the first is running is HTTP 409 idempotency_request_in_progress. An empty or invalid key is HTTP 400 invalid_idempotency_key. A definitive refusal removes the key. An ambiguous failure keeps it and the same request returns HTTP 409 idempotency_outcome_unknown. client_id is checked first when both are set. Done keys expire after 24 hours. Unknown keys are kept for 7 days.
