# Create File Upload — Notion

> Create a file upload. See the documentation

- Key: `notion-create-file-upload`
- Type: Action (Write)
- Version: 0.0.11
- App: Notion (`notion`) — https://pipedream.com/apps/notion.md
- This page (HTML): https://pipedream.com/apps/notion/actions/create-file-upload
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/notion/actions/create-file-upload/create-file-upload.mjs

## Description

Create a file upload. [See the documentation](https://developers.notion.com/reference/create-a-file-upload)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `mode` | `string` | No | How the file is being sent. Use Multi Part for files larger than 20MB. Use External URL for files that are temporarily hosted publicly elsewhere. |
| `filename` | `string` | No | Name of the file to be created. Required when mode is multi_part or external_url. Otherwise optional, and used to override the filename. Must include an extension. |
| `contentType` | `string` | No | MIME type of the file to be created. Recommended when sending the file in multiple parts. Must match the content type of the file that's sent, and the extension of the filename parameter if any. |
| `numberOfParts` | `integer` | No | When mode is Multi Part, the number of parts you are uploading. Must be between 1 and 1,000. This must match the number of parts as well as the final part_number you send. |
| `externalUrl` | `string` | No | When mode is External URL, provide the HTTPS URL of a publicly accessible file to import into your workspace. |

## 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": "notion",
      },
    },
  },
)

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: "notion-create-file-upload",
  arguments: {
    mode: "Mode",
    filename: "Filename",
  },
})
```

**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: "notion-create-file-upload",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    notion: { authProvisionId: "apn_xxxxxxx" },
    mode: "Mode",
    filename: "Filename",
  },
})

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": "notion-create-file-upload",
    "configured_props": {
      "notion": { "authProvisionId": "apn_xxxxxxx" },
      "mode": "Mode",
      "filename": "Filename"
    }
  }'
```

---

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