diff --git a/ticdc/ticdc-changefeed-config.md b/ticdc/ticdc-changefeed-config.md
index 4c1c419f33555..22c38576c6f57 100644
--- a/ticdc/ticdc-changefeed-config.md
+++ b/ticdc/ticdc-changefeed-config.md
@@ -353,6 +353,14 @@ The following configuration parameters control the sending behavior of bootstrap
- Controls whether to output the value before the row data changes. The default value is true. When it is disabled, the `UPDATE` event does not output the "before" field.
- Default value: `true`
+##### `include-start-ts` New in v8.5.9
+
+- Controls whether Debezium JSON DML messages include `source.start_ts` (the original PD TSO of the source transaction).
+- Default value: `false`
+- This parameter takes effect only when the sink type is MQ and the output protocol is Debezium JSON. Setting it with Debezium Avro is rejected.
+- You can also set the equivalent URI parameter `debezium-include-start-ts`. An explicit URI value takes precedence over this configuration item, including `false` overriding `true`.
+- For the message format and consumer precision requirements, see [TiCDC Debezium Protocol](/ticdc/ticdc-debezium.md#include-the-transaction-start-tso).
+
### consistent
Specifies the replication consistency configurations for a changefeed when using the redo log. For more information, see [Eventually consistent replication in disaster scenarios](/ticdc/ticdc-sink-to-mysql.md#eventually-consistent-replication-in-disaster-scenarios).
diff --git a/ticdc/ticdc-debezium.md b/ticdc/ticdc-debezium.md
index 14e06356f0050..956bb3589d138 100644
--- a/ticdc/ticdc-debezium.md
+++ b/ticdc/ticdc-debezium.md
@@ -29,6 +29,47 @@ The Debezium output format contains the schema information of the current row so
In addition, the original Debezium format does not include important fields such as the unique transaction identifier of the `CommitTS` in TiDB. To ensure data integrity, TiCDC adds two fields, `CommitTs` and `ClusterID`, to the Debezium format to identify the relevant information of TiDB data changes.
+### Include the transaction start TSO New in v8.5.9
+
+By default, Debezium JSON DML messages include `source.commit_ts` but not the transaction start TSO. You can optionally include `source.start_ts` (the original PD TSO when the source transaction started) on DML row events only. This option is disabled by default.
+
+You can enable it in either of the following ways:
+
+- In `sink-uri`:
+
+ ```
+ kafka://127.0.0.1:9092/topic-name?protocol=debezium&debezium-include-start-ts=true
+ ```
+
+- In the changefeed configuration file:
+
+ ```toml
+ [sink.debezium]
+ include-start-ts = true
+ ```
+
+An explicit URI value takes precedence over the configuration file, including `debezium-include-start-ts=false` overriding `include-start-ts = true`.
+
+When this option is enabled:
+
+- DML value messages add integer `source.start_ts` next to `commit_ts`, and the JSON schema declares the field as `int64`.
+- DDL events, WATERMARK/checkpoint events, key messages, and Debezium Avro are unchanged. Setting this option with the Debezium Avro protocol is rejected.
+- To roll back, disable the option. Messages produced while it is off stay byte-compatible with the previous format.
+
+> **Note:**
+>
+> `start_ts` is the original uint64 PD TSO, not a millisecond timestamp. Consumers must treat it as a 64-bit integer or a decimal string. Do not parse it as a JavaScript `Number` or IEEE-754 `float64`, which cannot represent an 18-digit TSO exactly.
+
+When the option is enabled, the `source` block looks like the following:
+
+```json
+"source": {
+ "commit_ts": 447507027004751877,
+ "start_ts": 447507027004751800,
+ "cluster_id": "default"
+}
+```
+
## Message format definition
This section describes the message formats of DDL events, DML events and WATERMARK events.
@@ -572,6 +613,7 @@ The key fields of the preceding JSON data are explained as follows:
| `payload.before` | JSON | The data value before the change event of a statement. For `"c"` events, the value of the `before` field is `null`. |
| `payload.after` | JSON | The data value after the change event of a statement. For `"d"` events, the value of the `after` field is `null`. |
| `payload.source.commit_ts` | Number | The `CommitTs` value of the event. |
+| `payload.source.start_ts` | Number | The start TSO of the source transaction. Present only when `debezium-include-start-ts` or `[sink.debezium] include-start-ts` is enabled. Original uint64 PD TSO, not a millisecond timestamp. |
| `payload.source.db` | String | The name of the database where the event occurs. |
| `payload.source.table` | String | The name of the table where the event occurs. |
| `schema.fields` | JSON | The type information of each field in the payload, including the schema information of the row data before and after the change. |
diff --git a/ticdc/ticdc-open-api-v2.md b/ticdc/ticdc-open-api-v2.md
index 81846f0d3b333..d0ee6109504ae 100644
--- a/ticdc/ticdc-open-api-v2.md
+++ b/ticdc/ticdc-open-api-v2.md
@@ -373,6 +373,7 @@ The `sink.csv` parameters are described as follows:
| Parameter name | Description |
|:-------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `output_old_value` | `BOOLEAN` type. It controls whether to output the value before the row data changes. The default value is true. When it is disabled, the UPDATE event does not output the "before" field. |
+| `include_start_ts` | `BOOLEAN` type. New in v8.5.9. It controls whether Debezium JSON DML messages include `source.start_ts` (the original PD TSO of the source transaction). The default value is `false`. |
### Example
diff --git a/ticdc/ticdc-sink-to-kafka.md b/ticdc/ticdc-sink-to-kafka.md
index d6733e7772831..314842e18d8b8 100644
--- a/ticdc/ticdc-sink-to-kafka.md
+++ b/ticdc/ticdc-sink-to-kafka.md
@@ -83,6 +83,7 @@ The following are descriptions of sink URI parameters and values that can be con
| `compression` | The compression algorithm used when sending messages (value options are `none`, `lz4`, `gzip`, `snappy`, and `zstd`; `none` by default). Note that the Snappy compressed file must be in the [official Snappy format](https://github.com/google/snappy). Other variants of Snappy compression are not supported.|
| `auto-create-topic` | Determines whether TiCDC creates the topic automatically when the `topic-name` passed in does not exist in the Kafka cluster (optional, `true` by default). |
| `enable-tidb-extension` | Optional. `false` by default. When the output protocol is `canal-json`, if the value is `true`, TiCDC sends [WATERMARK events](/ticdc/ticdc-canal-json.md#watermark-event) and adds the [TiDB extension field](/ticdc/ticdc-canal-json.md#tidb-extension-field) to Kafka messages. From v6.1.0, this parameter is also applicable to the `avro` protocol. If the value is `true`, TiCDC adds [three TiDB extension fields](/ticdc/ticdc-avro-protocol.md#tidb-extension-fields) to the Kafka message. |
+| `debezium-include-start-ts` | Optional. New in v8.5.9. `false` by default. Takes effect only when `protocol` is `debezium`. If the value is `true`, TiCDC adds `source.start_ts` (the original PD TSO of the source transaction) to Debezium JSON DML messages. An explicit URI value takes precedence over `[sink.debezium] include-start-ts` in the configuration file. This option is rejected for Debezium Avro. For details, see [TiCDC Debezium Protocol](/ticdc/ticdc-debezium.md#include-the-transaction-start-tso). |
| `max-batch-size` | New in v4.0.9. If the message protocol supports outputting multiple data changes to one Kafka message, this parameter specifies the maximum number of data changes in one Kafka message. It currently takes effect only when Kafka's `protocol` is `open-protocol` (optional, `16` by default). |
| `enable-tls` | Whether to use TLS to connect to the downstream Kafka instance (optional, `false` by default). |
| `ca` | The path of the CA certificate file needed to connect to the downstream Kafka instance (optional). |