# Format Text — Google Docs

> Apply character formatting (bold, italic, underline, strikethrough, font, size, color, link) to text in a Google Doc. Locate the text with Find Text, or pass an explicit Start Index and End Index. Use Find Document to resolve a document's…

- Key: `google_docs-format-text`
- Type: Action (Write)
- Version: 0.0.3
- App: Google Docs (`google_docs`) — https://pipedream.com/apps/google-docs.md
- This page (HTML): https://pipedream.com/apps/google-docs/actions/format-text
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/google_docs/actions/format-text/format-text.mjs

## Description

Apply character formatting (bold, italic, underline, strikethrough, font, size, color, link) to text in a Google Doc. Locate the text with **Find Text**, or pass an explicit **Start Index** and **End Index**. Use **Find Document** to resolve a document's name to its ID. [See the documentation](https://developers.google.com/workspace/docs/api/reference/rest/v1/documents/request#UpdateTextStyleRequest)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `documentId` | `string` | Yes | The ID of the Google Doc. This is the long string in the document's URL: https://docs.google.com/document/d/{DOCUMENT_ID}/edit. Use Find Document to resolve a document's name to its ID. |
| `find` | `string` | No | The text to style. The action locates it in the document and styles each match selected by Occurrence. Leave blank only if you are supplying Start Index and End Index instead. |
| `occurrence` | `string` | No | Which matches of Find Text to style: first (default) or all. |
| `matchCase` | `boolean` | No | Case sensitive search (true) or not (false). Defaults to false |
| `startIndex` | `integer` | No | Character index to style from, inclusive. Use with End Index instead of Find Text. Indices come from Get Document and shift after every edit, so prefer Find Text. |
| `endIndex` | `integer` | No | Character index to style up to, exclusive. Must be greater than Start Index. |
| `tabId` | `string` | No | For a multi-tab document, restrict the operation to this tab (e.g. t.0). Get tab IDs from List Tabs. Omit to search every tab for Find Text; an explicit Start Index / End Index without a Tab ID applies to the first tab only. |
| `bold` | `boolean` | No | Set true to bold the text, false to remove bold. Leave unset to keep it unchanged. |
| `italic` | `boolean` | No | Set true to italicize the text, false to remove italics. Leave unset to keep it unchanged. |
| `underline` | `boolean` | No | Set true to underline the text, false to remove the underline. Leave unset to keep it unchanged. |
| `strikethrough` | `boolean` | No | Set true to strike through the text, false to remove it. Leave unset to keep it unchanged. |
| `smallCaps` | `boolean` | No | Set true to render the text in small capitals, false to return it to normal casing. Leave unset to keep it unchanged. |
| `baselineOffset` | `string` | No | Vertical offset from the normal baseline. SUPERSCRIPT and SUBSCRIPT are also rendered in a smaller font, computed from the current size. |
| `fontSize` | `integer` | No | Font size in points (1-400). |
| `fontFamily` | `string` | No | Font family name as it appears in the Google Docs font menu, e.g. Roboto or Times New Roman. The API resets the range's weight to 400 whenever the family changes, so set Font Weight (or Bold) as well to keep heavy text heavy. |
| `fontWeight` | `integer` | No | Rendered weight of the font, a multiple of 100 from 100 to 900 (400 is normal, 700 is bold). Only valid alongside Font Family, and worth setting whenever you change the font of text that should stay heavy. |
| `foregroundColor` | `string` | No | Text color as a hex code, e.g. #FF0000. |
| `backgroundColor` | `string` | No | Highlight (background) color as a hex code, e.g. #FFFF00. |
| `link` | `string` | No | Turn the text into a hyperlink pointing at this URL. |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
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 accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "google_docs",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "google_docs-format-text",
  arguments: {
    documentId: "Document ID",
    find: "Find Text",
  },
})
```

**TypeScript**

```ts
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: "google_docs-format-text",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    google_docs: { authProvisionId: "apn_xxxxxxx" },
    documentId: "Document ID",
    find: "Find Text",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "google_docs-format-text",
    "configured_props": {
      "google_docs": { "authProvisionId": "apn_xxxxxxx" },
      "documentId": "Document ID",
      "find": "Find Text"
    }
  }'
```

---

- App: https://pipedream.com/apps/google-docs.md · All apps: https://pipedream.com/apps
