View as Markdown
Gmail icon

Gmail ACTION

Download Attachment

Download a Gmail message attachment to /tmp and return its path + metadata. File Stash syncs the file and exposes a presigned download URL so the caller can retrieve it. Call Find Emails with fields: ["subject", "attachments"], or Get Thread, first: each returned message lists its attachments as attachments: [{ partId, filename, mimeType, size }]. Pass the message's id as messageId and the attachment's partId as partId. This works for any message size, including large HTML emails whose payload is too big to return. Alternatively pass attachmentId from a message's payload.parts[].body.attachmentId. Provide partId or attachmentId; when both are given, partId is used. When only attachmentId is given, Gmail issues a new one for the same part on every read, so the filename and MIME type are resolved separately: by partId, then by a unique filename-and-size match, then by a unique size match. If none resolve, the file is saved as attachment-<id> with an extension detected from its contents. If filename is omitted, the action uses the attachment's own filename from the message. Set convertToPdf: true to convert image / HTML / plain-text / DOCX attachments to PDF during download; other MIME types are rejected. See the documentation.
  • Action
  • Read only
  • OAuth
  • SDK
  • MCP

IMPLEMENTATION

Call this tool

Connect a user's Gmail account once, then configure and run Download Attachment from your backend or agent.

import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "gmail-download-attachment",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    gmail: { authProvisionId: "apn_xxxxxxx" },
    messageId: "Message ID",
    partId: "Part ID",
  },
})

console.log(result)

SCHEMA

Inputs

Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.

Download Attachment inputs
Property Type Description
messageId Message ID string
The id of the message containing the attachment, e.g. 19a2b3c4d5e6f789. Obtain this from Find Emails or Get Thread.
Required
partId Part ID string
The attachment's partId from the message's attachments list, e.g. 1 or 0.2. Get it from Find Emails with fields: ["subject", "attachments"], or from Get Thread. Stable across reads of the message. Required unless attachmentId is set.
Optional
attachmentId Attachment ID string
The attachment's ID from a message's payload.parts[].body.attachmentId, a long opaque string such as ANGjdJ8wX0kL... (returned by Find Emails with format: "full" and payload requested, or by Get Thread). Not needed when partId is set, and prefer partId: on large messages the payload holding this ID can be dropped to fit the response cap.
Optional
filename Filename string
Filename to save in /tmp (include the extension, e.g. report.pdf). Pass the part's filename when you have it. If omitted, the action resolves it from the message payload (see partId).
Optional
convertToPdf Convert to PDF boolean
When true, convert the attachment to a PDF. Supported source MIME types: image/*, text/html, text/plain, and DOCX (application/vnd.openxmlformats-officedocument.wordprocessingml.document). Other types throw.
Optional
syncDir SyncDir dir
Required

REFERENCE

Tool details

Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.

Registry key
gmail-download-attachment
Version
0.3.0
App
Gmail
Authentication
OAuth
Read-only
Yes
Destructive
No
Open world
Yes