---
title: "Withdraw a cloned voice's consent: no new use, provider copy deleted."
method: POST
path: "/voices/{voiceId}/revoke-consent"
tags: ["Voices"]
---

# Withdraw a cloned voice's consent: no new use, provider copy deleted.

`POST /voices/{voiceId}/revoke-consent`

## Request

- Base URL: `https://docs.sleeperhit.studio/api/v1`
- URL: `https://docs.sleeperhit.studio/api/v1/voices/{voiceId}/revoke-consent`
- Auth: HTTP bearer

Withdraws every consent on record for one of your cloned voices. From now on every cast, pin, preview and speak of it is refused (409 `voice_consent_revoked`), and its copy at the voice provider (with any Pro dataset) is deleted within 7 days (`providerDeletionBy`). Work already published stays up. Final: the voice can never be confirmed again. The library record stays as the record; delete it with DELETE /voices/{voiceId} if wanted. Free.  Requires `Idempotency-Key`. Scope: `story:write`.

## Headers

- `Idempotency-Key` string, required

## Response `200`

Consent withdrawn.

- VoiceConsentRevokeResponse: A withdrawn consent: the voice is refused for anything new from now on, and its copy at the provider is deleted by `providerDeletionBy`. Work already published stays up.
  - `voiceId` string, required
  - `name` string, required
  - `revoked` integer, required: How many consent records were withdrawn (0 when none was active).
  - `revokedAt` string, date-time, required
  - `providerDeletionBy` string, date-time, nullable, required
  - `consent` StudioVoiceConsent, required: The consent of the person whose voice a CLONE is. A clone speaks only while `status` is `recorded`; `required` (cloned before consent records began) is refused with 409 `voice_consent_required` until its subject confirms through POST /voices/{voiceId}/consent-link; `revoked` is final (409 `voice_consent_revoked`). A designed voice is `not_needed`.
    - `status` 'recorded' | 'required' | 'revoked' | 'not_needed', required
    - `consentId` string, nullable, required
    - `recordedAt` string, date-time, nullable, required
    - `subjectType` 'self' | 'living_third_party' | 'estate' | 'null', nullable, required: Whose voice it is: the account holder, another living person, or a deceased person approved by their estate.
    - `subjectName` string, nullable, required
    - `revokedAt` string, date-time, nullable, required

## Other responses

- `400`: Request payload failed validation. The error message names the offending field.
- `401`: Missing, malformed, revoked, or expired API key.
- `403`: API key is valid but lacks the scope, is blocked by IP allowlist, or the account is disabled.
- `404`: No voice with that id in your library, or another writer's cloned or designed voice, which is never yours to preview, cast, pin or migrate onto (`voice_not_found`). GET /voices lists the ones you own; a catalog voice can be previewed and assigned but not renamed or deleted.
- `429`: Rate limit for this API key + IP + route family was exceeded.
- `500`: The API failed unexpectedly. Safe to retry with the same Idempotency-Key.

---

[API](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api.md) · [All operations](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/llms.txt) · [OpenAPI document](https://skmtc.dev/sleeperhit/apis/sleeper-hit-studio-story-api/revisions/4534f5d25540?raw)
