---
title: "GET /api/script-assistant/sessions/{sessionId}"
method: GET
path: "/api/script-assistant/sessions/{sessionId}"
tags: ["ScriptAssistant"]
---

# GET /api/script-assistant/sessions/{sessionId}

`GET /api/script-assistant/sessions/{sessionId}`

## Request

- Base URL: `https://api.wearelearning.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.wearelearning.io/api/script-assistant/sessions/{sessionId}`
- Auth: OAuth 2
  - Implicit: `https://login.wearelearning.io/authorize?audience=https://api.wearelearning.io`

## Path parameters

- `sessionId` string, required

## Response `200`

OK

- SessionDto
  - `sessionId` string, required
  - `title` string, nullable
  - `status` string, required
  - `messages` ChatMessageDto[], required
    - `id` string, required
    - `role` string, required
    - `content` string, nullable
    - `timestamp` string, date-time, required
  - `files` SessionFileDto[], required
    - `fileId` string, required
    - `fileName` string, required
    - `mimeType` string, required
    - `sizeBytes` integer, required
    - `status` 'Pending' | 'Converting' | 'Succeeded' | 'Failed', required
    - `parsingSucceeded` boolean, required: Derived from WeAreLearning.R2D2.Api.DTO.ScriptAssistant.SessionFileDto.Status for one release. The API and the client deploy separately, so removing this before the client stops reading it makes every upload look failed. Delete once the client is out — tracked as a follow-up.
    - `parsingErrorCode` 'None' | 'Unknown' | 'UnsupportedFileType' | 'FileTooLarge' | 'EncryptedFile' | 'NoTextFound' | 'CorruptFile' | 'Timeout' | 'SuspectedZipBomb' | 'TooManySlides' | 'SourceExpired' | 'NotASlideDeck', required
    - `uploadedAt` string, date-time, required
    - `isSlideDeck` boolean, required: Whether this file classified as a slide deck at upload time. Present here, and not only on WeAreLearning.R2D2.Api.DTO.ScriptAssistant.FileUploadResultDto, so the classification survives a session reload — the upload response is seen once, and a reloaded session would otherwise forget it.
    - `slideCount` integer, nullable: Slide or page count when known; null — never zero — when not. See WeAreLearning.R2D2.Api.DTO.ScriptAssistant.FileUploadResultDto.SlideCount.
  - `guidelines` GuidelinesDto
    - `topicAndRawContent` string, nullable
    - `learningGoals` string, nullable
    - `targetPersonas` string, nullable
    - `personas` PersonaDto[], nullable
      - `description` string, required
      - `imageReference` string, nullable
    - `learningApproach` string, nullable
    - `courseLength` string, nullable
    - `targetDurationMinutes` integer, nullable
    - `isComplete` boolean, required
  - `outline` OutlineDto
    - `id` string, required
    - `title` string, required
    - `estimatedDurationMinutes` integer, required
    - `scenes` OutlineSceneDto[], required
      - `id` string, required
      - `title` string, required
      - `method` string, required
      - `learningObjective` string, required
      - `nodes` OutlineNodeDto[], required
        - `id` string, required
        - `nodeType` string, required
        - `purpose` string, required
        - `contentSketch` string, required
        - `speakerHint` string, nullable
        - `hasDecisionPoint` boolean, required
        - `outcomes` string[], nullable
        - `pageData` OutlinePageDataDto
          - `pages` OutlinePageDto[], required
            - `title` string, required
            - `sections` OutlineSectionDto[], required
              - …
      - `edges` OutlineEdgeDto[], required
        - `id` string, required
        - `source` string, required
        - `target` string, required
        - `sourceHandle` string, required
        - `label` string, nullable
      - `orderIndex` integer, required
      - `location` string, nullable
      - `characters` OutlineNodeCharacterDto[], nullable
        - `id` string, required
        - `position` OutlineThreeDimensionalPositionDto
          - `x` number, double, required
          - `y` number, double, required
          - `z` number, double, required
        - `rotation` number, float, required
        - `pose` string, required
      - `thumbnailPath` string, nullable
    - `skills` OutlineSkillDto[], required
      - `id` string, required
      - `name` string, required
      - `description` string, required
    - `isComplete` boolean, required
    - `version` integer, required
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required
  - `creationMode` 'Undecided' | 'Context' | 'Slideshow', required
  - `origin` 'ScriptAssistant' | 'Presentation', required
  - `narrationSource` 'None' | 'AiDraft' | 'SpeakerNotes', required
  - `renderJobId` string, nullable: Current render job. A newer job supersedes beats from an older one.
  - `renderFailure` 'None' | 'TooLarge' | 'ConversionFailed' | 'SourceMissing' | 'CouldNotStart', required
  - `renderFailurePageCount` integer, nullable: Slides found, for the over-ceiling message.
  - `renderFailureMaxSlides` integer, nullable: The ceiling that was exceeded, so the client need not know the configuration.
  - `presenter` SlideshowPresenterDto: The presenter a Slideshow user chose: who presents, where they stand, and what they sound like.
    - `characterId` string, required
    - `position` ThreeDimensionalPositionDto, required
      - `x` number, double, required
      - `y` number, double, required
      - `z` number, double, required
    - `rotation` number, float, required: Degrees, positive clockwise. Always in [0, 360).
    - `voiceName` string, nullable: Null means no voice was chosen, which is a legal answer - it is resolved from the character's gender, the story language and the tenant's defaults when the story is built. It is NOT the same as an empty string, which the write refuses.
    - `lighting` SlideshowPresenterLightingDto: The presenter's lighting, in the units of a node's lighting override: `TimeOfDay` is the light's angle as a fraction of a turn, and the colour's channels and brightness are in [0, 1]. Components are nullable for the REQUEST's sake - an omitted one is refused, not read as 0; a response always carries all of them.
      - `timeOfDay` number, float, nullable
      - `indoorLighting` SlideshowPresenterColorDto: The lighting's colour: the same wire shape as WeAreLearning.R2D2.Dto.Locations.ColorDto, WITHOUT its defaults.
        - `r` number, float, nullable
        - `g` number, float, nullable
        - `b` number, float, nullable
        - `brightness` number, float, nullable

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found

---

[API](https://skmtc.dev/wearelearning/apis/we-are-learning-api.md) - [All operations](https://skmtc.dev/wearelearning/apis/we-are-learning-api/llms.txt) - [OpenAPI document](https://skmtc.dev/wearelearning/apis/we-are-learning-api/revisions/e2ca5265db77?raw)
