---
title: "Save a recorded sign-in"
method: POST
path: "/v1/web-recorder/{sid}/finalize"
tags: ["web-recorder"]
---

# Save a recorded sign-in

`POST /v1/web-recorder/{sid}/finalize`

## Request

- Base URL: `https://api.brixsignage.com`
- URL: `https://api.brixsignage.com/v1/web-recorder/{sid}/finalize`
- Auth: HTTP bearer

Save a completed recording to a web asset, using mediaId and optional secrets. The recorded steps are stored on the asset's web configuration, secrets are encrypted and referenced by name, and the session ends.

**Notes.**
- The asset's sign-in is replayed later to refresh its cookies; call `links/:mediaId/verify` to test it now.

## Path parameters

- `sid` string, required

## Request body

- object
  - `mediaId` string, required: The web page asset to save the steps to.
  - `secrets` object: `valueRef` → secret value. Encrypted; never returned. Null or empty removes one.
  - `expect` object: The asset's `url` and `webConfig` as you last read them. The save is refused (409) if the address or sign-in steps changed since, so secrets are never stored for a link you did not see.
    - `url` string, required
    - `webConfig` unknown, required
  - `removeSteps` integer[]: Indices into the session's steps to leave out of the saved recording.

## Response `200`

Success.

- object
  - `data` object, required
    - `ok` true, required
    - `stepCount` integer, required
    - `steps` RecordedStep[], required: The steps saved on the asset (the session's, minus `removeSteps`).
      - `kind` string, required: `navigate`, `click`, `enter-text`, `scroll`, `accept-cookies`, `wait`, or a picker step.
      - `url` string
      - `selector` string
      - `label` string
      - `value` string: Typed text that is not secret.
      - `valueRef` string: For secret text: a reference; the value is never recorded. Send it in `finalize`'s `secrets`.
      - `pixels` number
      - `ms` number
    - `secretRefs` object[], required: Every secret step, so you can send values you have not sent yet.
      - `ref` string, required
      - `label` string, required

## Other responses

- `400`: `mediaId` is missing.
- `401`: Missing, expired or revoked bearer token.
- `403`: You do not hold `media.edit` where the asset lives.
- `404`: The session expired or never started, or no such asset.
- `409`: The asset's address or sign-in steps changed (or are not what `expect` says). Nothing was saved.
- `503`: Recording is not available in this environment.
- `5XX`: Server error. The body carries a `requestId` to quote to support.

---

[API](https://skmtc.dev/brixsignage/apis/brix-api.md) · [All operations](https://skmtc.dev/brixsignage/apis/brix-api/llms.txt) · [OpenAPI document](https://skmtc.dev/brixsignage/apis/brix-api/revisions/02fd3665dc7d?raw)
