Skip to main content
POST
/
ds
/
{bucket}
/
{stream}
curl -X POST https://stream.tonbo.dev/ds/demo/hello \
  -H 'Content-Type: application/octet-stream' \
  --data-binary 'hello world'
bucket
string
required
Bucket ID.
stream
string
required
Stream ID within the bucket.
Content-Type
string
required
Must match the stream’s content type. Required when the body is non-empty.
Stream-Closed
string
Set to true to close the stream after this append.
If-Match
string
Conditional write — only succeed if the stream’s ETag matches.
Stream-Seq
string
Client-supplied sequence token for conflict detection.
Producer-Id
string
Producer identity for exactly-once writes.
Producer-Epoch
string
Producer epoch.
Producer-Seq
string
Producer sequence number.
body
binary
required
The bytes to append. Must not be empty unless Stream-Closed: true is set (close-only request).

Response

StatusMeaning
200Append successful.
400Empty body without Stream-Closed: true, missing content type, or bad JSON.
404Stream not found.
409Stream is already closed, or sequence/producer conflict.
412If-Match precondition failed.
503Write backpressure — retry after the duration in Retry-After.
Response headers include Stream-Next-Offset and ETag.
curl -X POST https://stream.tonbo.dev/ds/demo/hello \
  -H 'Content-Type: application/octet-stream' \
  --data-binary 'hello world'
Appends to JSON streams are validated and normalized. The server may coalesce multiple concurrent appends into a single batch for performance.