---
title: "Update one or more exposed properties on a block instance live."
method: PATCH
path: "/api/flows/{flow_id}/blocks/{block_id}/properties"
tags: ["flows"]
---

# Update one or more exposed properties on a block instance live.

`PATCH /api/flows/{flow_id}/blocks/{block_id}/properties`

Properties are expressed in block-level (user-facing) units — e.g.
`{"ch1_pfl": true, "fader_db": -3.0}`. The backend resolves each name to its
underlying GStreamer element via the block definition's PropertyMapping,
applies the declared transform (`bool_to_volume`, `db_to_linear`, …), and
writes through the standard live-property path (so `ramp_ms` produces the
usual anti-click fade where applicable). `ramp_ms_overrides` lets the
caller pin a different ramp duration for individual properties in the same
batch — useful for crossfades where one fader rises while another falls at
the same rate but other properties move instantly.

Only properties marked `live: true` are accepted. Unknown, non-live, or
type-mismatched entries are returned in the `rejected` map without aborting
the rest of the batch.

## Path parameters

- `flow_id` string, required
- `block_id` string, required

## Request body

- UpdateBlockPropertiesRequest — Request to update one or more exposed properties on a block instance live. Values are expressed in the block-level (user-facing) units defined by the block — e.g. `ch1_pfl: true` (Bool), `fader_db: -3.0` (dB). The backend resolves each property to its underlying GStreamer element via the block's PropertyMapping and applies the declared transform (`bool_to_volume`, `db_to_linear`, …) before writing. Only properties marked `live: true` in the block definition can be patched via this endpoint. Non-live properties must go through the regular flow update.
  - `properties` object, required — Map of exposed property name → new value (in block-level units).
  - `ramp_ms` integer, nullable — Optional default ramp duration in ms applied to every property in this batch (honored for volume-element writes — produces anti-click fades for bool/dB toggles that map to a `volume` property). Acts as the fallback when no per-property override is set in `ramp_ms_overrides`.
  - `ramp_ms_overrides` object, nullable — Optional per-property ramp duration overrides, keyed by exposed property name. When a property in `properties` has an entry here, that duration is used instead of the batch-level `ramp_ms`. Entries for names not present in `properties` are silently ignored. Only effective for properties whose underlying write goes through the ramp path (currently audio `volume`-element `volume` and `mute`); for other properties the override is accepted but has no effect, matching the behavior of the batch-level `ramp_ms`. Enables crossfades where individual faders ramp at different rates within a single PATCH.

## Response `200`

Block properties applied (see `rejected` for partial failures)

- BlockPropertiesResponse — Response containing current block-level exposed property values and any rejections.
  - `block_id` string, required — The block instance ID
  - `properties` object, required — Current values (in block-level units, inverse-transformed from the live elements)
  - `rejected` object — Names of properties that could not be applied, mapped to a short reason. Empty on full success. Only populated on PATCH.

## Other responses

- `404` — Flow not running or block not found

## Changes

> 25 revisions in range; 17 could not be searched.

- **2026-04-07** `1e67862a080e` — 1 breaking
  - api path removed without deprecation

[Change history](https://skmtc.dev/eyevinn/apis/strom-api/changes/api/flows/:flow_id/blocks/:block_id/properties/patch.md)

---

[API](https://skmtc.dev/eyevinn/apis/strom-api.md) · [All operations](https://skmtc.dev/eyevinn/apis/strom-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/eyevinn/strom-api/revisions/0df7ca64263f/schema)
