Offcloud

type: offcloud

Offcloud resolves file handles through its cloud explore endpoint. File sizes are checked against the delivery server rather than trusted from the listing. Cached torrent metadata supplies folder paths wherever it can be matched without ambiguity.

Get the API key

Sign in and open offcloud.com/#/account. The API key is on that page.

Configure it

zurg: v1
providers:
  - type: offcloud
    token: YOUR_OFFCLOUD_API_KEY
mount_path: "/zurg_mnt/zurg"

On a fresh container install let setup write it.

cd ~/zurg
docker compose run --rm zurg setup \
  --no-service --skip-downloads --mount-path /zurg_mnt/zurg \
  --provider offcloud

On an install that already has a config.yml use Add provider in the Dashboard at http://localhost:9999/config/ or edit the file. Restart either way.

docker compose restart zurg

OFFCLOUD_TOKEN is read by zurg setup and not by the running daemon.

One credential per entry

Offcloud file handles belong to the account that listed them. There is no second key to rotate to. download_tokens is refused and so is a strm_link_token that differs from token. A second account is a second entry with its own name.

providers:
  - type: offcloud
    name: oc-main
    token: FIRST_OFFCLOUD_API_KEY
  - type: offcloud
    name: oc-second
    token: SECOND_OFFCLOUD_API_KEY

What works here

Library browsing and streamed reads and redirected reads and STRM and magnet adds and .torrent uploads and deletion all work. The account gets its own __offcloud__ directory.

Limits worth knowing

8 concurrent API requests. Four volumes of a multi-volume archive are resolved at once.

Content expires. A release that has gone is expected rather than broken. Repair leaves it alone unless you ask.

The torrent list carries no file detail. Each release costs its own lookup the first time.

An ambiguous file listing is an error rather than a guess. Sometimes the cached torrent metadata cannot be matched to exactly one release. zurg reports that instead of picking folder paths that might belong to something else.

Malformed magnets are refused locally. They never reach the service. A bad magnet costs nothing.

Offcloud's failure vocabulary is thin. NOAUTH is the one code zurg can act on and it means the credential was rejected. Everything else arrives as a refusal without a reason.

Check it worked

curl -fsS -X POST http://localhost:9999/api/providers/offcloud/test
ls /zurg_mnt/zurg/__offcloud__/ | head

When it goes wrong

NOAUTH in the log. The key was revoked or regenerated. Get a new one from offcloud.com/#/account and update the entry.

API refused request with nothing else. Offcloud did not say why. Check the account in a browser before assuming zurg is at fault.

A release lists no folders. The cached torrent metadata could not be matched to exactly one release. The files still stream. They are just flat.

Generated URLs work for anyone who has them. Delivery URLs are refreshed when their cache expires or when a read invalidates them. The quota they spend is the account's own. Keep them and .strm access private.