---
title: "Public download tunnel — recipient downloads the file via standard HTTP"
method: GET
path: "/d/{token}"
tags: ["transfer", "discovery"]
---

# Public download tunnel — recipient downloads the file via standard HTTP

`GET /d/{token}`

## Request

- Base URL: `https://srift.app`
- URL: `https://srift.app/d/{token}`
- Auth: none required

Streams the file as a standard HTTP response from the seeder's daemon via the signaler. `Content-Disposition: attachment; filename="…"` so browsers and `curl -fLOJ` / `wget --content-disposition` auto-name the file. Supports HTTP Range (`Accept-Ranges: bytes`) for resume. Honours `maxDownloads` and `ttlMs` set at registration time. Concurrent recipients each get an independent parallel stream.

## Response `200`

Full file

## Other responses

- `206`: Partial content (Range)
- `404`: Token unknown / expired / sender offline
- `410`: Token expired or exhausted (max-downloads reached)
- `416`: Range not satisfiable
- `424`: The sender's file was deleted or changed after the link was created (permanent)
- `502`: The sender dropped mid-stream; retry
- `503`: Sender offline
- `504`: Timed out waiting for first byte from sender

---

[API](https://skmtc.dev/srift/apis/srift-api.md) · [All operations](https://skmtc.dev/srift/apis/srift-api/llms.txt) · [OpenAPI document](https://skmtc.dev/srift/apis/srift-api/revisions/efe3ae285f45?raw)
