---
title: "Mint a link for a cloned voice's subject to confirm their consent."
method: POST
path: "/voices/{voiceId}/consent-link"
tags: ["Voices"]
---

# Mint a link for a cloned voice's subject to confirm their consent.

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

## Request

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

A cloned voice speaks only with the recorded consent of the person whose voice it is. A clone made before consent records began is listed with `consent.status: "required"` and refused everywhere (409 `voice_consent_required`) until they confirm. This mints a 7-day browser link: the person opens it, says whose voice it is (their own, or a deceased person's on the estate's behalf), confirms they are 18 or older, reads a consent statement aloud and agrees. The link is the auth, so hand it to them (or open it yourself if it is your voice). A designed voice needs no consent (400); a voice whose consent was withdrawn can never be confirmed again (409 `voice_consent_revoked`). Free.  Requires `Idempotency-Key`. Scope: `story:write`.

## Headers

- `Idempotency-Key` string, required

## Response `200`

The consent link.

- VoiceConsentLinkResponse: A 7-day browser link the person whose voice a clone is opens to confirm their consent (they read a statement aloud and agree). The link is the auth; hand it to them.
  - `voiceId` string, required
  - `consentUrl` string, uri, required
  - `expiresAt` string, date-time, 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.
- `409`: The consent for a cloned voice was withdrawn (`voice_consent_revoked`), so it is never used for anything new. `details.voices` names each; choose another voice.
- `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)
