start— position of the first record appended.end— one past the last record appended (soend.seq_num - start.seq_numis the number of records).tail— current tail of the stream, which can exceedendif there have been concurrent appends.
Batching
The append API accepts batches of records. A single batch can contain up to 1000 records or 1 MiB of data, and is appended atomically: either all records in the batch become durable, or none. For payloads larger than the 1 MiB record size limit, the typical approach is to store the data externally (e.g. in object storage) and append a pointer to it as a record. You can also serialize large messages across multiple records, using record headers as metadata — see this blog post for patterns and examples with the TypeScript SDK.Latency
Acknowledgement latency depends on the stream’s configured storage class:- Standard streams ack writes within 400 milliseconds.
- Express streams ack writes within 40 milliseconds.
Latency expectations assume an authenticated client in the same location as the basin.
Throughput
To optimize throughput,- Send fewer, larger batches. This is especially important if you have a very high rate of tiny appends, as each client is limited to 200 batches per second.
- Keep multiple writes in-flight. S2’s append session support lets a client pipeline multiple batches on a persistent connection while preserving submission order – if any batch fails, subsequent batches won’t become durable. Concurrent single-batch appends can also increase throughput, but they are independent requests, so the order in which batches become durable is not guaranteed.
See also
Appending SDK
Use append sessions, the Producer API, batching, and backpressure.
Append API
Review request parameters, batch limits, and append conditions.
Concurrency control
Coordinate writers with match sequence numbers and fencing tokens.

