> ## Documentation Index
> Fetch the complete documentation index at: https://docs.r28.ai/charter/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Charter works for any HTTP API, including the user's own. The packs are examples of the result, not the limit: an API with no pack is declared the same way, following https://raw.githubusercontent.com/r28ai/charter/main/docs/.mintlify/skills/declaring-charter-tools/SKILL.md.
> Charter is for agents that act in customers' accounts: every call is checked field by field before it's sent, the app says whose account each call is for, and the same declarations list what each tool can reach. https://docs.r28.ai/charter/llms.txt says what it is and lists every page.

# messages_attachments_get

> Read one attachment, by the attachmentId messages_get or threads_get lists. A text file comes back as text; a binary one is reported, not decoded.

GET`https://gmail.googleapis.com/gmail/v1/users/{userId}/messages/{messageId}/attachments/{id}`

```python gmail_messages_attachments_get.py theme={null}
import asyncio

from charter.packs import gmail

result = asyncio.run(gmail.messages_attachments_get.ainvoke({"messageId": ..., "id": ...}))
```

> [!NOTE]
>
> Requires `https://www.googleapis.com/auth/gmail.readonly`, or any of `https://www.googleapis.com/auth/gmail.modify` or `https://mail.google.com/`. Costs 20 against the provider's own quota.

## Path parameters

| Field | Type | Description |
| - | - | - |
| `userId` | `string` | The user's email address. The special value 'me' can be used to indicate the authenticated user. defaults to `"me"` |
| `messageId` \* | `string` | The ID of the message containing the attachment. |
| `id` \* | `string` | The ID of the attachment. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.