---
title: "Public Attachment Download"
method: GET
path: "/core/public/attachments/{attachment_id}"
tags: ["Public Attachment Download"]
---

# Public Attachment Download

`GET /core/public/attachments/{attachment_id}`

## Request

- Base URL: `https://api.anyreach.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.anyreach.ai/core/public/attachments/{attachment_id}`
- Auth: none declared

Stream one attachment to any holder of the signed URL. No auth by design.

This exists because a human-handoff provider needs a URL that still resolves when an
agent reopens the conversation days later, and a presigned S3 GET cannot do that:
SigV4 caps expiry at 7 days, and a URL signed with ECS task-role credentials dies
with the STS session (hours). So the bucket stays private and we proxy.

The HMAC in ``sig`` is the whole capability; ``org`` rides along because the
``conversation_attachments`` RLS policy keys off the JWT's organization claim, and a
global-scope client would silently read zero rows rather than error. It is inside
the MAC, so it cannot be swapped for another org's.

## Path parameters

- `attachment_id` string, required

## Query parameters

- `org` string, required
- `sig` string, required
- `fmt` string, nullable

## Response `200`

Successful Response

- unknown

## Other responses

- `422`: Validation Error

---

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