Trigger a reconciliation run.
A run scans the whole deployment, so only an admin may start one. It is queued unless one, manual or scheduled, is already waiting or running, so repeated calls never stack runs.
A run scans the whole deployment, so only an admin may start one. It is queued unless one, manual or scheduled, is already waiting or running, so repeated calls never stack runs.
bearerAuthAuthorizationBearer <token>A Sluby API key (sluby_...) sent as Authorization: Bearer <key>. Keys carry scopes: upload, read, manage.
Queued, or a run was already pending.
application/json- response
enqueued*booleanA new run was queued.
already_pending*booleanA run was already waiting or running, so nothing new was queued. It covers scheduled runs as well as manual ones.
curl -X POST 'https://sluby.example.com/api/v1/reconciliation/run'{ "enqueued": true, "already_pending": true}Latest reconciliation run. GET
Admins get the whole run, orphaned ids included; members get only the missing objects of the workspace’s assets (see ReconciliationRun).
Stream a Sia object, with byte-range support. GET
An object of a public asset needs nothing. An object of a private asset needs the `expires` and `sig` of a signed url (GET /api/v1/playback/{id}/signed); a manifest served that way has the urls of its children signed with the same expiry. Access follows only the asset tier: a signed playback ID gates its own /v1/stream entry, not these objects. HEAD answers the same headers without a body. A public answer carries `ETag` (the object id) and `Cache-Control: public, no-cache`, and a conditional request (`If-None-Match`) is answered 304 only after access is checked again, so a cache never keeps serving an object after its asset turns private or is deleted; the shipped nginx keeps small public objects for at most 60 seconds between checks. Objects over 8 MB are streamed and never cached.