# Program Streams Payload Formats

> Choose JSON or protobuf payloads for decoded program streams.

Canonical: https://nolimitnodes.com/docs/api-reference/program-streams/payload-formats

Program Streams support JSON and protobuf payloads.

## JSON

Set:

```protobuf
format = JSON;
```

The response `payload` field contains JSON text.

```python
event = json.loads(message.payload)
```

Use JSON for:

- Initial integration
- Logs and inspection
- Dynamic consumers
- Low event volume

## Protobuf

Set:

```protobuf
format = PROTO;
```

The response `payload` field contains base64 text for the encoded protobuf message.

```python

raw = base64.b64decode(message.payload)
event = PayloadMessage()
event.ParseFromString(raw)
```

Fetch `PayloadMessage` and its proto through `GetTopicSchema`.

Use protobuf for:

- Lower parsing overhead
- Strong field types
- High event volume
- Stable generated clients

## Important difference

Enhanced Streams expose `payload` as protobuf `bytes`.

Program Streams expose `payload` as protobuf `string`.

Only Program Streams PROTO output needs base64 decoding.
