---
title: "Download a link someone shared with you"
method: POST
path: "/links/resolve"
tags: ["Downloads"]
---

# Download a link someone shared with you

`POST /links/resolve`

## Request

- Base URL: `https://yungle.co/api/v1`
- URL: `https://yungle.co/api/v1/links/resolve`
- Auth: HTTP bearer

Pass a transfer (`/t/…`) or collection (`/c/…`) link and get what a person opening it in a browser could download, as signed URLs. The same rules as the page apply: passwords go through the same attempt budgets, one call counts as one download of the transfer, a download limit is enforced, and a collection shared with invited guests only is refused. Any key may call it, including a free one.

## Request body

- object
  - `url` string, required: A Yungle share link: `https://yungle.co/t/…` (a transfer) or `https://yungle.co/c/…` (a collection).
  - `password` string: For a password-protected link.

## Response `200`

Signed download URLs.

- DownloadLinks: Signed download URLs for a transfer or collection.
  - `kind` string, required: Currently one of: `transfer`, `collection`. Treat unknown values as unknown, not as an error.
  - `title` string, nullable, required: A collection's title, or your own transfer's title when you ask for its links. Null when resolving a transfer link someone shared with you: a transfer's title is never shown to recipients.
  - `message` string, nullable, required: The sender's note on a transfer.
  - `expiresAt` string, date-time, nullable, required: When the transfer or collection itself expires. Null for one that keeps things forever.
  - `e2ee` boolean, required: End-to-end encrypted: the bytes are ciphertext, and the key is in the `#` part of the link.
  - `e2eeMeta` string, nullable
  - `complete` boolean, required: False while a transfer is still uploading. `files` lists what has arrived so far; ask again later.
  - `zipUrl` string, uri, nullable, required: Everything in one ZIP (resumable with `Range`). Null for a single file, or while incomplete.
  - `urlsExpireAt` string, date-time, required: When the signed URLs stop working. Ask again for fresh ones.
  - `files` DownloadLink[], required (unresolved $ref)

## Other responses

- `400`: The request was malformed or failed validation. Codes: `invalid_request`, `folder_error`.
- `401`: Missing or invalid credential. Codes: `unauthorized`.
- `402`: Needs a paid plan, or prepaid credit for metered usage. Codes: `upgrade_required`, `out_of_credit`.
- `403`: The credential lacks a required scope, or a shared link refused access. Codes: `insufficient_scope`, `password_required`, `wrong_password`, `guests_only`.
- `404`: No such resource in this workspace. Codes: `not_found`.
- `409`: Already exists, an Idempotency-Key conflict, or end-to-end encrypted content the server cannot serve. Codes: `conflict`, `e2ee_unsupported`.
- `410`: The transfer has been sent, revoked or expired; or a shared link is no longer available. Codes: `not_editable`, `link_unavailable`.
- `429`: Rate limit or email budget exhausted. Wait for `Retry-After`. Codes: `rate_limited`, `email_budget_exhausted`.
- `500`: Our fault. `details.requestId` ties it to our logs. Codes: `internal_error`.

---

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