# email_attachment_url

Get Email Attachment Download URL

## Beschreibung

Returns a short-lived signed URL (~15 min) for downloading
an email attachment. The attachment's account binding is
inferred from the `eatt_…` ID.

Email attachments are lazy: the row is created at
header-sync time but the bytes are pulled on demand. If
the blob isn't yet stored locally, this tool fetches it
from Gmail synchronously before returning the URL.

The URL is fine to pass to any HTTP client — it carries
its own signature and does not need an Authorization
header.

## Zugriff

Zugriffsprofil: `gated`. Module: `email`.
Die Freigabe im Profil ersetzt keine Account-, Workspace- oder Rollenberechtigung.

## Parameter

| Name | Typ | Pflicht | Beschreibung |
| --- | --- | --- | --- |
| `account_id` | string | Ja | Account prefix ID (acct_…). |
| `attachment_id` | string | Ja | Email attachment prefix ID (eatt_…) from email_thread_get FULL_CONTENT. |

## Eingabeschema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "account_id": {
      "type": "string",
      "description": "Account prefix ID (acct_…)."
    },
    "attachment_id": {
      "type": "string",
      "description": "Email attachment prefix ID (eatt_…) from email_thread_get FULL_CONTENT."
    }
  },
  "required": [
    "account_id",
    "attachment_id"
  ],
  "type": "object"
}
```

## Ausgabeschema

```json
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Signed download URL, valid 15 minutes."
    },
    "expires_at": {
      "type": "string",
      "format": "date-time"
    },
    "filename": {
      "type": "string"
    },
    "content_type": {
      "type": [
        "string",
        "null"
      ]
    },
    "size_bytes": {
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "required": [
    "url",
    "expires_at",
    "filename"
  ],
  "type": "object"
}
```
