---
title: "Create Training Persona"
method: POST
path: "/training-personas"
tags: ["training-personas"]
---

# Create Training Persona

`POST /training-personas`

## Request

- Base URL: `https://dev.whispa.net` (the document declares no server; this is the origin it was published from)
- URL: `https://dev.whispa.net/training-personas`
- Auth: one of:
  - OAuth 2
    - Password
    - Token URL: `auth/bearer/login`
  - API key in cookie `access_token`

Create a training persona (admin only).

## Request body

- TrainingPersonaCreate: Input schema for creating a training persona.
  - `name` string, required: Unique persona identifier
  - `display_name` string, required: Human-readable name
  - `description` string, required: Situation summary shown on the persona card
  - `scenario_id` string, uuid, required: Training scenario this persona belongs to
  - `debtor_name` string, required: Fictional debtor full name
  - `date_of_birth` string, nullable
  - `address` string, nullable
  - `creditor_account` string, nullable: Creditor / account description
  - `amount_owed` string, nullable: Free-text overdue amount
  - `temperament_tags` string[]: Temperament labels driving card badges (e.g. busy, aggressive)
  - `difficulty` string: easy | medium | hard
  - `affordability` string, nullable: What the debtor can realistically pay
  - `backstory` string, nullable: Extra colour for how the persona behaves
  - `prompt_override` string, nullable: Verbatim simulation prompt; wins over the structured template
  - `first_message` string, nullable: Opening line the simulated customer speaks
  - `voice` string, nullable: Simulated customer voice: male | female (null = agent default)
  - `is_active` boolean: Whether the persona is shown

## Response `201`

Successful Response

- TrainingPersonaResponse: Full persona payload including computed prompt for call-start overrides.
  - `id` string, uuid, required
  - `name` string, required
  - `display_name` string, required
  - `description` string, required
  - `scenario_id` string, uuid, required
  - `scenario_name` string, nullable: Joined Scenario.name for /training hydration
  - `scenario_display_name` string, nullable
  - `debtor_name` string, required
  - `date_of_birth` string, nullable, required
  - `address` string, nullable, required
  - `creditor_account` string, nullable, required
  - `amount_owed` string, nullable, required
  - `temperament_tags` string[], required
  - `difficulty` string, required
  - `affordability` string, nullable, required
  - `backstory` string, nullable, required
  - `prompt_override` string, nullable, required
  - `first_message` string, nullable, required
  - `voice` string, nullable, required
  - `resolved_prompt` string, required: Final simulation prompt (override or structured template)
  - `resolved_voice_id` string, nullable: ElevenLabs voice ID for the persona's voice, applied as a runtime TTS override at call start (null = agent default voice)
  - `is_active` boolean, required
  - `created_by` string, uuid, nullable, required
  - `updated_by` string, uuid, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/whispa/apis/whispa-api.md) - [All operations](https://skmtc.dev/whispa/apis/whispa-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whispa/apis/whispa-api/revisions/12c2e4aca43c?raw)
