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

# Screenshots, recordings and logs

> Let workflows, AI agents and your team ask customers for a screenshot or a screen recording in the conversation, and collect logs from their app without asking.

Seeing a problem is often faster than reading about it. Workflows, AI agents and teammates can ask a customer to take a screenshot or record their screen, right in the conversation. The customer taps a button, the Gleap SDK captures your website or app, and the capture arrives as the customer's message. Workflows, AI agents and teammates can also collect logs from the customer's app in the background, without asking the customer.

<Note>
  Taking screenshots and recordings in the widget needs SDK 19.1.0 or later. Older versions show the request with **Upload a file** instead. See [Supported SDKs](#supported-sdks).
</Note>

## How it works

1. A workflow, an AI agent or a teammate asks. The request appears in the conversation as a message with **Take screenshot** or **Record my screen**, **Upload a file** and **Not now**.
2. The customer taps **Take screenshot** or **Record my screen**. The widget moves out of the way and a small bar asks them to go to the screen they want to show.
3. Nothing is captured until the customer taps **Capture** or **Start** in the bar.
4. A screenshot opens in an editor, where the customer can mark it up and blur parts before sending. A recording shows a preview with **Send**, **Retake** and **Cancel**.
5. The capture arrives as the customer's message. A waiting workflow continues, an AI agent looks at the capture before it answers, and your team is notified like for any customer message.

## Ask for a capture

### In a workflow

The workflow builder has three blocks for this in the **Customer interaction** category:

| Block | What it does |
| - | - |
| **Ask for screenshot** | Sends the request and waits until the customer sends a capture or skips it. |
| **Ask for screen recording** | The same for a screen recording. |
| **Collect log data** | Collects logs from the customer's app in the background and continues right away. See [Background log collection](#background-log-collection). |

Options of **Ask for screenshot** and **Ask for screen recording**:

| Option | Default | What it does |
| - | - | - |
| **Message** | A short prefilled question | The text the customer reads above the buttons. Translate it like the other texts of the workflow. |
| **Ask for** | The block you added | **Screenshot**, **Screen recording** or **Customer picks**. |
| **Allow file upload** | On | The customer can send an existing file instead. |
| **Mark up screenshots** | On | The customer can draw, add text and blur before sending. |
| **Max recording length** | The project setting (1 min) | 5 seconds to 3 minutes. |
| **Microphone** | Off | The customer can talk while recording. Needs **Microphone** in the [project settings](#settings). |
| **Attach logs** | The project setting (on) | Logs from the customer's app are sent with the capture. |

The workflow waits until the customer sends the capture or skips it, then continues with the next step. To do something different in each case, [branch on the result](#branch-on-the-result).

### With AI agents

Add these tools to an AI agent under **Tools → Add tool**:

* **Ask for screenshot or recording**: the agent asks for a screenshot when the problem is visual, a recording when it is about a flow or an interaction, or lets the customer pick. It writes the message in the customer's language, plus an internal note on what it wants to see that the customer never sees. The agent waits until the capture or the skip arrives. Options: **Allow file upload** and **Max recording length**.
* **Collect app logs**: the agent collects logs from the customer's app for technical errors, without asking the customer. Options: what to collect, and **Wait for the app** (5 to 60 seconds, 15 by default). If the app isn't open, the agent hears so right away. The request then stays open for 24 hours, and logs that arrive later are added to the conversation.

Like replies to the customer, only the agent that handles the conversation can ask the customer for a capture.

**Kai Resolve** has both tools built in. There is nothing to set up.

**Kai** asks for a screenshot or a recording on its own in widget conversations when seeing the problem would help. Add **Ask for screenshot or recording** to Kai's tools only to change when Kai asks (the tool's description) or the upload and length options. To let Kai collect logs, add **Collect app logs** to Kai's tools.

To stop Kai and Kai Resolve from asking for screenshots and recordings, turn off **Kai can ask** in the [settings](#settings). Agents you gave **Ask for screenshot or recording** yourself keep the tool.

### From the inbox

In the composer of a conversation, select the camera button (**Ask for a screenshot, recording or logs**) and choose:

* **Screenshot** or **Recording**: edit the prefilled message and select **Send request**. The request is posted as your message.
* **Logs**: select **Collect logs**. The logs show up in the conversation once the customer's app sends them. This works for conversations from the widget.

The button is disabled when the conversation has no contact.

Each request shows its status in the conversation: **Waiting**, **In progress**, **Received**, **Skipped**, **Cancelled** or **Expired**. Select **Cancel** to withdraw a request while it's waiting. A workflow waiting for that request continues as skipped. An AI agent that asked is not woken up by the cancellation.

## What the customer sees

### In the widget

The request appears as a message with a button for what was asked (**Take screenshot**, **Record my screen** or both), plus **Upload a file** and **Not now**. **Not now** sends "I can't share that right now." as the customer's reply.

While the customer captures, the card shows the progress. Afterwards it shows **Sent**, **Skipped**, **This request was withdrawn.** or **This request has expired.**

All texts the customer sees, including the capture bar and the editor, are in **Project settings → Static translations → Capture**.

### On each platform

| Where the customer is | Screenshot | Screen recording |
| - | - | - |
| Chrome, Edge and other Chromium browsers on desktop | The browser asks to share the tab. One click captures the exact pixels. If the customer cancels, the SDK renders the page in the browser instead, without asking again. | The browser asks what to share and offers the current tab first. |
| Firefox and Safari on desktop | The SDK renders the page in the browser. No prompt. | The browser asks which window or screen to share. |
| Browsers on phones and tablets | The SDK renders the page in the browser. No prompt. | A page recording: the SDK records the changes of the page, not a video. Your team plays it in the replay player. |
| iOS and Android apps | The SDK draws your app's own windows. No system prompt. | Recorded inside the app, at about 4 frames per second and without sound. No system prompt. Needs Android 8 or newer. |
| SDKs and versions without capture support, and the AI chatbar | **Upload a file** | **Upload a file** |
| Email, WhatsApp and other channels | The request arrives as text. The customer replies with an image. | The customer replies with a video. |

* A screenshot shows the visible part of the page or app.
* To never show the browser's share prompt for screenshots, set **Web screenshots** to **Never show a browser prompt** in the [settings](#settings).
* If screen sharing for a recording doesn't start in a desktop browser (the customer cancels, or it's blocked), the bar offers **Record this page** instead.
* On sites where a link loads a new page, a recording stops when the page changes. The bar comes back on the next page with **Record again**.
* A recording stops at the maximum length. In apps, it pauses while the app is in the background.
* When the request allows the microphone, desktop browsers show a microphone button in the recording bar. The microphone stays off until the customer turns it on. Apps record without sound.

### Mark up screenshots

Each screenshot opens in an editor (**Mark what matters**) before it's sent. The customer can use **Draw**, **Arrow**, **Box**, **Text**, **Blur** and **Crop**, with **Undo** and **Redo**, then **Send** or **Retake**. **Blur** pixelates the area in the image that is sent, so the original content of that area never leaves the device.

With **Mark up screenshots** turned off in the workflow block, the customer sees a plain preview with **Send**, **Retake** and **Cancel**.

### Upload a file

**Upload a file** accepts images for screenshot requests, videos for recording requests, and both when the customer picks. Files can be up to 100 MB. The button shows when the request allows uploads, and always when the device can't capture.

An image or video the customer attaches with the paperclip of the composer also answers the oldest open request that didn't come from a workflow.

### Email, WhatsApp and other channels

Conversations outside the widget get the request as plain text, followed by "Reply with a screenshot or screen recording." The customer's next reply with an image or a video answers the request. In a workflow, a reply without an image or video counts as skipped, and the workflow continues.

Logs can't be collected from these conversations: there is no Gleap SDK on the other end.

## What your team and AI agents get

The capture arrives as the customer's message:

* **Screenshots** show as images. Screenshots the customer marked up are labeled **Annotated**.
* **Recordings** play in the conversation. **Logs during recording** shows the console and network logs of the recording's time next to the video.
* **Page recordings** open in the replay player with **Play page recording**, with the logs of that time beside them.
* **Logs** show as an internal line, **Logs collected**, with the number of console lines, requests, errors and failed requests. **Open logs** opens them.

AI agents get:

* Screenshots as images, with a description of what the customer marked.
* Recordings as a description with timestamps. Gleap describes each recording with AI when it arrives. This counts toward your AI usage.
* Page recordings as a timeline of clicks, inputs (without their values), page changes, errors and failed requests.
* Logs as a summary with the environment, the latest errors and the latest failed requests.

## Background log collection

Logs are collected when a **Collect log data** block runs, an AI agent uses **Collect app logs**, or a teammate selects **Logs** in the composer. The customer doesn't need to do anything, but your app or website must be open with the Gleap SDK. If it isn't, the request waits up to 24 hours and is answered when the app connects again.

**What is sent**: the same data a bug report contains. That's console logs, network requests, custom data, environment data and events. The replay is only sent when it's asked for and replays are turned on for your project. Your existing settings apply, for example disabled console logs, network log filters and ignored environment data fields.

**Where it goes**: the logs are added to the conversation's logs. Nothing already there is replaced. Environment data is updated to the new values, and custom data is merged key by key. Your team sees the internal line **Logs collected**.

**What the customer sees**: a short line in the conversation, "Diagnostic data was shared with the support team." It's shown in the widget only, never sent by email. Turn it off with **Tell the customer** in the [settings](#settings). Logs that come with a screenshot or recording don't add this line.

**Logs with captures**: with **Attach logs** on, the logs around a screenshot or a recording are sent with it.

To turn log collection off:

* **Background log collection** off in the [settings](#settings): no logs are collected in the background. Workflow blocks collect nothing, and AI agents and the composer say that it's turned off.
* **Attach logs** off in the settings: screenshots and recordings arrive without logs. Workflow blocks have their own **Attach logs** option.
* In your app: `setRemoteLogCollectionEnabled(false)` answers log requests as not supported. In the iOS and Android SDKs, it also stops logs from being sent with screenshots and recordings. See your SDK's page under [Supported SDKs](#supported-sdks).

## Privacy

* Nothing is captured until the customer taps **Capture** or **Start**. When a desktop browser shares the tab, a window or the screen, the browser asks for permission first.
* While a recording runs, the bar shows a red dot, the time and **Stop**. A recording is only sent after the customer confirms the preview, a screenshot after **Send** in the editor.
* Gleap's own UI, such as the widget, the feedback button and the capture bar, never appears in a capture. On iOS, the keyboard is never captured either.
* Sensitive content is blacked out:
  * **Web**: password fields, fields for one-time codes and card numbers, elements with the classes `gl-mask`, `gl-block`, `rr-mask` or `rr-block`, the masking options of `Gleap.setReplayOptions`, card payment frames and the CSS selectors in **Masked elements**. Page recordings mask every input value. While a screen recording runs in a desktop browser, the same elements are blurred on your page; other tabs, windows or the screen the customer shares are recorded as they are. See [JavaScript](/documentation/javascript/screenshots-and-recordings#mask-content).
  * **iOS**: secure text fields, fields for passwords, one-time codes and card numbers, and views you mask with `maskView`. See [iOS](/documentation/ios/screenshots-and-recordings#mask-views).
  * **Android**: password fields, windows with `FLAG_SECURE`, and views you mask with `maskView`. See [Android](/documentation/android/screenshots-and-recordings#mask-views).
* The customer can blur and crop a screenshot before sending it.
* The note an AI agent writes about what it wants to see is never shown to the customer.
* Background logs contain only what a bug report contains. You can turn them off for the project and in your app; turning them off in the app also sends screenshots and recordings without logs.
* Captures are stored like any other attachment of the conversation.

## Settings

In the [Gleap dashboard](https://app.gleap.ai), open **Project settings → Developer options → Screenshots & recordings**:

| Setting | Default | What it does |
| - | - | - |
| **Web screenshots** | Exact pixels first on Chrome and Edge | Chromium browsers on desktop capture the tab after the customer confirms the browser's share prompt. **Never show a browser prompt** always renders the page in the browser instead. |
| **Max recording length** | 1 min | 15 seconds to 3 minutes. Workflow blocks and the agent tool can set their own length. |
| **Microphone** | Off | Customers can talk while they record their screen in a desktop browser. |
| **Kai can ask** | On | Kai and Kai Resolve may ask customers in the widget for a screenshot or a screen recording when it helps them answer. |
| **Attach logs** | On | Logs from the customer's app are sent with every screenshot and recording. |
| **Background log collection** | On | Workflows, AI agents and your team can collect logs from the customer's app without asking them. |
| **Tell the customer** | On | A short line in the conversation says that diagnostic data was shared. Shown while background log collection is on. |
| **Masked elements** | None | CSS selectors of elements to black out in web screenshots, blur in screen recordings and hide in page recordings, on top of password and card fields, for example `.card-number` or `#account-id`. |

## Branch on the result

After an **Ask for screenshot** or **Ask for screen recording** block, add a **Condition** step. Choose **Capture results**, pick the block, and choose:

* **Received**: the customer sent a screenshot, a recording, or an image or video file.
* **Skipped**: the customer tapped **Not now** or answered on another channel without an image or video, a teammate cancelled the request, or the conversation already had 10 open requests.

## Limits

* Up to 10 open screenshot and recording requests per conversation.
* Screenshot and recording requests expire after 7 days, log requests after 24 hours.
* The maximum recording length can be set from 5 seconds to 3 minutes. Uploaded files can be up to 100 MB.
* Logs can be collected once per minute per conversation (a second request within the minute reuses the first) and 30 times per customer per day.

## Supported SDKs

The request card is part of the widget, so customers see it with every SDK version. Taking screenshots and recordings, and collecting logs, needs SDK 19.1.0 or later:

| SDK | Screenshots and recordings | Background logs |
| - | - | - |
| [JavaScript](/documentation/javascript/screenshots-and-recordings) | Yes. Sites that load the SDK with the code snippet get it automatically. | Yes |
| [iOS](/documentation/ios/screenshots-and-recordings) | Yes | Yes |
| [Android](/documentation/android/screenshots-and-recordings) | Yes. Recordings need Android 8 or newer. | Yes |
| [React Native](/documentation/reactnative/screenshots-and-recordings) | Yes, on iOS and Android | Yes |
| [Flutter](/documentation/flutter/screenshots-and-recordings) | Yes | Yes |
| [Ionic Capacitor](/documentation/ioniccapacitor/screenshots-and-recordings) | Yes | Yes |

Older versions and other SDKs show the request with **Upload a file** and **Not now**, and logs can't be collected from them.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.