---
title: "Validate and canonicalize a complete Voice Profile v2 without mutating data"
method: POST
path: "/api/v1/channels/{channel}/voices/validate"
tags: ["voices"]
---

# Validate and canonicalize a complete Voice Profile v2 without mutating data

`POST /api/v1/channels/{channel}/voices/validate`

## Request

- Base URL: `https://subscribr.ai`
- URL: `https://subscribr.ai/api/v1/channels/{channel}/voices/validate`
- Auth: HTTP bearer

## Request body

- ValidateVoiceProfileRequest
  - `intent` 'create' | 'update', required
  - `name` string, required
  - `profile` VoiceProfileV2, required
    - `writing_style_analysis` object, required
      - `adherence_checklist` string[], required
      - `delivery_recipe` object, required
        - `cadence` string, required
        - `energy` string, required
        - `pacing_and_emphasis` string[], required
      - `diction_and_syntax` object, required
        - `avoid` string[], required
        - `preferred_constructions` string[], required
        - `sentence_shape` string, required
        - `vocabulary_level` 'simple' | 'conversational' | 'sophisticated', required
        - `word_complexity` string, required
      - `do_dont` object, required
        - `do` string[], required
        - `dont` string[], required
        - `never_does` string[], required
      - `example_paragraph` string, required
      - `formatting_directives` string[], required
      - `jargon_policy` object, required
        - `allow` string[], required
        - `explain_with` string[], required
      - `lexical_glossary` object[], required
        - `definition` string, required
        - `term` string, required
      - `locale_and_dialect` string, required
      - `phrase_kit` object, required
        - `avoid` string[], required
        - `replacements` object[], required
          - `avoid` string, required
          - `use` string, required
        - `uses` string[], required
      - `rewriter_directives` string[], required
      - `rhetorical_toolkit` object, required
        - `analogy_and_evidence` string, required
        - `cta_patterns` object[], required
          - `location` 'opening' | 'middle' | 'closing', required
          - `pattern` string, required
        - `explanation_patterns` string[], required
        - `hook_patterns` string[], required
        - `humor_and_empathy` string, required
        - `storytelling_patterns` string[], required
        - `transitions` string[], required
      - `speaker_archetype` object, required
        - `axes` object, required
          - `age_vibe` string, required
          - `authority_posture` string, required
          - `profession_archetype` string, required
          - `temperament` string, required
        - `description` string, required
        - `label` string, required
      - `spoken_patterns` object, required
        - `common_phrases` string[], required
        - `starter_words` string[], required
        - `transition_phrases` string[], required
      - `stance_and_relationship` object, required
        - `audience_model` string, required
        - `certainty_level` string, required
        - `intimacy_distance` string, required
        - `narrative_person` string, required
      - `style_examples` string[], required
      - `thinking_style` string, required
  - `voice_id` string, uuid, nullable

## Response `200`

Validated canonical payload and bound short-lived receipt.

- ValidateVoiceProfileResponse
  - `data` object, required
    - `checksum` string, required
    - `diff` string[], required
    - `expected_revision` string, nullable, required
    - `expires_at` string, date-time, required
    - `normalized` VoiceProfileV2, required
      - `writing_style_analysis` object, required
        - `adherence_checklist` string[], required
        - `delivery_recipe` object, required
          - `cadence` string, required
          - `energy` string, required
          - `pacing_and_emphasis` string[], required
        - `diction_and_syntax` object, required
          - `avoid` string[], required
          - `preferred_constructions` string[], required
          - `sentence_shape` string, required
          - `vocabulary_level` 'simple' | 'conversational' | 'sophisticated', required
          - `word_complexity` string, required
        - `do_dont` object, required
          - `do` string[], required
          - `dont` string[], required
          - `never_does` string[], required
        - `example_paragraph` string, required
        - `formatting_directives` string[], required
        - `jargon_policy` object, required
          - `allow` string[], required
          - `explain_with` string[], required
        - `lexical_glossary` object[], required
          - `definition` string, required
          - `term` string, required
        - `locale_and_dialect` string, required
        - `phrase_kit` object, required
          - `avoid` string[], required
          - `replacements` object[], required
            - `avoid` string, required
            - `use` string, required
          - `uses` string[], required
        - `rewriter_directives` string[], required
        - `rhetorical_toolkit` object, required
          - `analogy_and_evidence` string, required
          - `cta_patterns` object[], required
            - `location` 'opening' | 'middle' | 'closing', required
            - `pattern` string, required
          - `explanation_patterns` string[], required
          - `hook_patterns` string[], required
          - `humor_and_empathy` string, required
          - `storytelling_patterns` string[], required
          - `transitions` string[], required
        - `speaker_archetype` object, required
          - `axes` object, required
            - `age_vibe` string, required
            - `authority_posture` string, required
            - `profession_archetype` string, required
            - `temperament` string, required
          - `description` string, required
          - `label` string, required
        - `spoken_patterns` object, required
          - `common_phrases` string[], required
          - `starter_words` string[], required
          - `transition_phrases` string[], required
        - `stance_and_relationship` object, required
          - `audience_model` string, required
          - `certainty_level` string, required
          - `intimacy_distance` string, required
          - `narrative_person` string, required
        - `style_examples` string[], required
        - `thinking_style` string, required
    - `receipt` string, required
    - `schema_version` unknown, required
    - `voice_id` string, uuid, required
    - `warnings` string[], required

## Other responses

- `400`: The request could not be processed.
- `401`: Authentication is required.
- `403`: The token, role, entitlement, or object policy denies this action.
- `404`: The resource was not found or is not visible.
- `422`: One or more request fields are invalid.
- `429`: The request exceeded a rate limit.
- `500`: The service is temporarily unavailable.

---

[API](https://skmtc.dev/subscribr/apis/subscribr-customer-api.md) · [All operations](https://skmtc.dev/subscribr/apis/subscribr-customer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/subscribr/apis/subscribr-customer-api/revisions/d1f105b58bbd?raw)
