Per-object sia:// share URLs for direct-from-Sia playback, without credentials.
Gated like /v1/stream: a public asset by its id or a public playback ID needs nothing. A private asset or a signed-policy playback ID needs the `expires` and `sig` of its signed master URL, and the shares then never outlive `expires`. Expiries are capped like the authenticated route (six hours, one hour when gated) and rounded to five-minute slots that the server caches, so repeated calls do not mint again. Every map is sent `no-store` (`private, no-store` when gated): minting one is how a direct-from-Sia play reaches the server, and each counts as a play (see `play_count` on an asset), unless `renew` is set. Share URLs already handed out keep working until they expire, whatever happens to the asset meanwhile.
Gated like /v1/stream: a public asset by its id or a public playback ID needs nothing. A private asset or a signed-policy playback ID needs the expires and sig of its signed master URL, and the shares then never outlive expires. Expiries are capped like the authenticated route (six hours, one hour when gated) and rounded to five-minute slots that the server caches, so repeated calls do not mint again. Every map is sent no-store (private, no-store when gated): minting one is how a direct-from-Sia play reaches the server, and each counts as a play (see play_count on an asset), unless renew is set. Share URLs already handed out keep working until they expire, whatever happens to the asset meanwhile.
id*stringAsset UUID or pb_ playback ID.
expires?integerExpiry (unix seconds) from the signed master URL. Required when gated.
sig?stringSignature from the signed master URL. Required when gated.
expires_in?integer3600Share URL map.
application/json- response
master_object_id?stringThe HLS master object id (hex).
shares?Map of Sia object id (hex) to a short-lived sia:// share URL the browser player resolves + downloads directly, no backend proxy.
expires_at?stringdate-timecurl -X GET 'https://sluby.example.com/v1/share/string'{ "master_object_id": "string", "shares": { "property1": "string", "property2": "string" }, "expires_at": "2019-08-24T14:15:22Z"}Master HLS manifest for an asset or playback ID. GET
A private asset or a signed-policy playback ID needs the `expires` and `sig` of the asset’s signed master url; the child urls in the answer are then signed too. A signed playback ID gates only this entry: on a public asset its objects stay public, so the bytes are not private (make the asset private for that), and other embeds of the asset keep playing. A public answer carries an ETag and `public, no-cache`, but no shared cache keeps it: each 200 GET counts as a play (see `play_count` on an asset); HEAD and 304 do not.
A video's public watch page, for a link or an iframe. GET
An HTML page that plays the video by asset ID or pb_ playback ID through the gateway. A private video or a signed playback ID needs the `expires` and `sig` of a signed URL, which the page passes on to the stream and the poster. Any site may frame it (`frame-ancestors *`). Query `autoplay=1`, `muted=1` and `loop=1` change how it starts.