> ## Documentation Index
> Fetch the complete documentation index at: https://docs.montra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# get_ticket_images

> Get the screenshots attached to a Montra ticket, as short-lived signed URLs.

Returns the screenshots attached to a ticket. These are real UI captures the person marked up while recording — arrows, boxes, and notes drawn straight onto the screen — so read them as part of the implementation spec rather than as decoration.

Each `url` is a short-lived signed link, minted fresh on every call. Fetch the images while you are working the ticket instead of storing the URLs for later.

Ticket ids come from [`get_document`](/tools/get-document); its `imageCount` tells you whether a ticket has any images before you call this.

## Input

<ParamField body="ticketId" type="string (uuid)" required>
  Id of the Montra ticket whose images to read.
</ParamField>

## Output

<ResponseField name="images" type="object[]" required>
  Returned in the order they appear on the ticket.

  <Expandable title="properties">
    <ResponseField name="id" type="string" required>Id of this image reference on the ticket.</ResponseField>
    <ResponseField name="url" type="string" required>Signed link to the image. `null` when the image has no resolved version yet — for example while it is still uploading.</ResponseField>
    <ResponseField name="caption" type="string" required>Caption written for the image. Empty when there is none.</ResponseField>
    <ResponseField name="includeInPrompt" type="boolean" required>Whether Montra includes this image when it builds the prompt for the ticket.</ResponseField>
    <ResponseField name="timestampMs" type="number" required>Position in the recording, in milliseconds, the screenshot was taken from.</ResponseField>
    <ResponseField name="mimeType" type="string" required>Image type, such as `image/png`. `null` when no version has resolved.</ResponseField>
    <ResponseField name="width" type="number" required>Image width in pixels. `null` when no version has resolved.</ResponseField>
    <ResponseField name="height" type="number" required>Image height in pixels. `null` when no version has resolved.</ResponseField>
    <ResponseField name="mediaAssetId" type="string" required>Id of the underlying media asset.</ResponseField>
    <ResponseField name="revisionId" type="string" required>Id of the exact image version the `url` points at. `null` when no version has resolved.</ResponseField>
    <ResponseField name="sortRank" type="string" required>Sort key. Images are already returned in this order.</ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="expiresInSeconds" type="number" required>
  How long the signed URLs stay valid, in seconds. Currently one hour (3600).
</ResponseField>

<ResponseField name="truncated" type="boolean" required>
  `true` when the ticket has more images than were returned.
</ResponseField>

## Notes

* URLs expire after `expiresInSeconds` (one hour). Once they lapse, call the tool again for fresh links rather than reusing the old ones.
* At most 100 images are returned per ticket. Anything beyond that is dropped and `truncated` comes back `true`.
* An image that is still uploading, or whose version cannot be resolved, comes back with `url`, `mimeType`, `width`, `height`, and `revisionId` all `null`. Retry later rather than treating it as missing.
* Each reference resolves to its pinned version if one was chosen, otherwise the asset's current version — so you see the same image a person sees in the app.
* A ticket whose document is outside the bound workspace reads as not found. See [workspace binding](/authentication#workspace-binding).
