# Pearl REST API publisher settings field names differ between reads and writes

Writing publisher settings and reading them back use different field-name conventions. A write takes a nested structure with underscore names; a read returns a flat structure with hyphenated names.

*Applies to: Pearl-2, Pearl Mini, Pearl Nexus, Pearl Nano.*

The settings themselves are the same — only the representation differs. This affects `GET /channels/{cid}/publishers/{pid}/settings`, the settings included in `GET /channels?publishers-settings=true`, and the body returned by a successful `PATCH`. If you write `common.enabled` and read back a body containing `started`, the write did not fail — the response simply uses the other convention.

**Fields shared by every publisher type.**

| Write (request) | Read (response) |
| --- | --- |
| `common.enabled` | `started` |
| `common.single_touch` | `single-touch` |
| `<protocol>.disable_audio` | `disable-audio` |

The protocol block disappears on read: fields nested under `rtmp`, `rtsp`, or `srt` in a request are returned at the top level of `result`, alongside `type` and `name`.

**RTMP.** `url`, `stream`, `username`, and `password` keep their names. A read also returns `auto_created`, which is not part of a write body.

**RTSP.** `url`, `transport`, `username`, and `password` keep their names.

**SRT.**

| Write (request) | Read (response) |
| --- | --- |
| `srt.mode` | `mode` |
| `srt.latency` | `latency` |
| `srt.url` | `url` |
| `srt.port` | `port` |
| `srt.stream_id` | `stream-id` |
| `srt.source_port` | `source-port` |
| `srt.bw_recovery_overhead` | `bw-recovery-overhead` |
| `srt.encryption.keylength` | `key-length` |
| `srt.encryption.passphrase` | `passphrase` |
| `srt.encryption` (object or `null`) | `encryption` (boolean) |

Note the last row: on write, `encryption` is either an object containing `passphrase` and `keylength`, or `null`. On read, `encryption` is a boolean and the passphrase and key length are returned as separate top-level fields.

A read of an SRT listener publisher returns all mode fields regardless of mode, so `url` may be present and empty on a listener while `port` carries the value.

> product: pearl-family · topic: other · source: pearl-rest-api.md · updated: Oct 7, 2026
