---
title: "Create a new real call session"
method: POST
path: "/api/v1/real-call-sessions"
tags: ["real-call-session"]
---

# Create a new real call session

`POST /api/v1/real-call-sessions`

Attributes the session to exactly one of userId or email. A known email resolves to the existing user. When the email does not match an existing user in the caller's organization, a Member user is automatically provisioned (the account requires setting a password on first login) ONLY when the organization has enabled "Automatically create new users from real-call transcripts" in its settings and the email's domain matches one of the organization's configured email domains; otherwise the upload is rejected with 422 and neither a user nor a session is created.

**Speaker-labeled SRT**: a standard SRT transcript may carry a `label: message` prefix on the first content line of each cue. A label that normalizes (trim + lowercase) to a valid email whose domain matches the organization's configured domains (or any email when no domains are configured) marks the speaker as internal (sales side); a non-matching email marks an external client whose turns are never attributed and never provisioned. Internal speakers are attributed to the matching Jam user (auto-provisioned under the same organization opt-in as the email parameter when unknown; turns stay unattributed when provisioning is disabled or impossible) and recorded as session participants. A non-email label (e.g. `Client:`) is stripped from the content without attribution, but only when its colon is followed by whitespace or ends the line (prose colons such as `10:30` or URLs are left intact).

**Rep scoring**: the userId/email parameter designates the scored rep. Scoring, KPIs and dashboards attribute exclusively to the rep; other labeled speakers are recorded as participants only (see participantUserIds on the session).

## Request body

- RealCallSessionCreateRequestDTO
  - `email` string, email — The learner email associated with the transcript. Designates the scored rep (see userId). When no user with this email exists in the organization, a Member user is automatically provisioned and the session is attributed to them.
  - `meetingName` string, required — The name of the meeting.
  - `missionId` string — The mission ID to be used for the scorecard.
  - `scorecardId` string — The scorecard ID to use for analysis. When omitted, the system will automatically classify the transcript and select the most appropriate scorecard.
  - `transcript` string, required — The transcript text to upload. Supports plain text, SRT, and speaker-labeled SRT where the first content line of a cue carries a "label: message" prefix: email labels attribute the turn to that Jam user and record them as a session participant; non-email labels (e.g. "Client:") are stripped without attribution. The transcript is rejected with 422 when it is speaker-labeled but the attributed rep (userId/email) never speaks in it.
  - `userId` string, uuid — The learner user ID associated with the transcript. Designates the scored rep: scoring, KPIs and dashboards attribute exclusively to this user; other labeled speakers become participants only.

## Response `201`

- RealCallSessionCreateResponseDTO
  - `analysis` object, required
    - `createdAt` string, date-time, required
    - `id` string, required
    - `items` object[], required
      - `behaviours` object[] — Array of behaviours assessed for this item
        - `evidence` string[], required — Evidence supporting the behaviour assessment
        - `score` number, required — The numerical score for this behaviour
        - `verdict` string, required — The verdict of the behaviour evaluation
      - `conversationItemReferenceId` string, nullable — Reference ID to the conversation item
      - `createdAt` string, date-time, required — The date and time when the item was created
      - `explanation` string, nullable — Explanation of the analysis result
      - `id` string, required — The unique identifier for the analysis item
      - `lastUpdatedAt` string, date-time, required — The date and time when the item was last updated
      - `name` string, nullable — The name of the analysis item
      - `score` number, required — The numerical score for this analysis item
      - `solved` 'undetected' | 'notSolved' | 'partlySolved' | 'solved' | 'null', nullable — The solving status of the item
      - `state` 'PROCESSING' | 'DONE' | 'ERROR', required — The current state of the analysis item
      - `suggestion` string, nullable — Suggestions for improvement
    - `lastUpdatedAt` string, date-time, required
    - `score` number, required
    - `state` 'PENDING' | 'PROCESSING' | 'DONE' | 'SKIPPED', required
  - `call` object, required
    - `assistantReferenceId` string, required — The reference ID for the assistant
    - `createdAt` string, date-time, required — The date and time when the call was created
    - `endedReason` string, nullable — The reason why the call ended
    - `id` string, required — The unique identifier for the call
    - `lastUpdatedAt` string, date-time, required — The date and time when the call was last updated
    - `providerCallId` string, nullable — The provider call identifier
    - `state` 'PENDING' | 'DONE' | 'DATA-NOT-AVAILABLE' | 'CAN-NOT-PROCESS-TRANSCRIPT', required — The current state of the call
    - `summary` string, nullable — A summary of the call
    - `transcript` string, nullable — The transcribed conversation text
  - `completed` boolean, required
  - `createdAt` string, date-time, required
  - `id` string, required
  - `kpis` object, required
    - `createdAt` string, date-time, required
    - `id` string, required
    - `lastUpdatedAt` string, date-time, required
    - `listenRatio` number, nullable
    - `longestMonologue` number, nullable
    - `state` 'PENDING' | 'PROCESSING' | 'DONE' | 'SKIPPED', required
    - `talkSpeed` number, nullable
  - `language` 'en' | 'de' | 'fr' | 'es' | 'it' | 'nl' | 'zh-Hans', required
  - `lastUpdatedAt` string, date-time, required
  - `missionReferenceId` string, nullable — Reference ID for the associated mission
  - `missionTitle` string, nullable
  - `participantUserIds` string[] — User IDs of all attributed speakers in the call, including the scored rep. Not yet resolved at creation time — read it from the session GET once transcript processing has finished.
  - `playedLanguage` 'en' | 'de' | 'fr' | 'es' | 'it' | 'nl' | 'pl' | 'zh' | 'ja' | 'id' | 'tr' | 'pt' | 'el' | 'ko' | 'vi' | 'hi' | 'ms' | 'th' | 'hr' | 'ro' | 'bg' | 'sv' | 'no' | 'yue' | 'null', nullable
  - `scorecardReferenceId` string, nullable — Reference ID for the associated scorecard
  - `scorecardTitle` string, nullable — Title of the associated scorecard
  - `state` 'PENDING' | 'PROCESSING' | 'DONE', required
  - `trackId` string, nullable — Parent track id for mission-backed roleplay sessions
  - `trackTitle` string, nullable
  - `type` 'REAL_CALL', required
  - `userId` string, required

## Other responses

- `403` — Organization seat limit reached — no user or session is created.
- `409` — The email already exists in the identity provider but is not a member of this organization.
- `422` — The upload is rejected and no user or session is created: the transcript is speaker-labeled (email-prefixed cues) but the attributed rep (userId/email) never speaks in it; OR the rep email has no Jam account while automatic user provisioning from transcripts is disabled for the organization; OR the rep email's domain does not match the organization's configured email domains; OR the referenced missionId or scorecardId does not exist.
- `502` — The identity provider refused to provision the user - no user or session is created; the upload can be retried.

---

[API](https://skmtc.net/wejam/apis/jam.md) · [All operations](https://skmtc.net/wejam/apis/jam/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/wejam/jam/revisions/bd5a5f406bca/schema)
