# Create Engagement — HubSpot

> Create a task, meeting, email, call, or note engagement with optional associations. If the request does not make the engagement type clear, ask which type (note, task, meeting, email, or call) before creating rather than guessing. Set…

- Key: `hubspot-create-engagement`
- Type: Action (Write)
- Version: 1.0.1
- App: HubSpot (`hubspot`) — https://pipedream.com/apps/hubspot.md
- This page (HTML): https://pipedream.com/apps/hubspot/actions/create-engagement
- Hints: open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/hubspot/actions/create-engagement/create-engagement.mjs

## Description

Create a **task, meeting, email, call, or note** engagement with optional associations. If the request does not make the engagement type clear, ask which type (note, task, meeting, email, or call) before creating rather than guessing. Set **Engagement Type** and pass engagement fields in **Object Properties** (HubSpot property names, e.g. `hs_note_body` for notes). No `reloadProps` step and no **CONFIGURE_COMPONENT** requirement: association fields accept raw HubSpot IDs (use **Search CRM** or the Associations API to resolve `associationType` when needed). For **only** a note on a contact by ID, **Add Note to Contact** (`hubspot-add-note-to-contact`) is still simpler. [See the documentation](https://developers.hubspot.com/docs/api/crm/engagements)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `engagementType` | `string` | Yes | One of: notes, tasks, meetings, emails, or calls (case-insensitive; NOTE / note map to notes). Defines the CRM object type created and which properties belong in Object Properties. For note on contact by ID, consider Add Note to Contact instead. |
| `toObjectType` | `string` | No | HubSpot object type for the record to associate (e.g. contact or contacts, companies, deals, tickets). Required when Associated Object ID and Association Type ID are set together. Use the plural object name or your custom object’s API name / fullyQualifiedName. |
| `toObjectId` | `string` | No | Numeric record ID to associate (string is fine). Optional unless you set Association Type ID. |
| `associationType` | `string` | No | HubSpot association typeId between this engagement type and Associated Object Type (integer as string or number). Resolve via HubSpot associations API or Search CRM; omit if you are not associating a record. |
| `objectProperties` | `object` | Yes | Writable HubSpot properties for the engagement as key/value pairs (same shape as the CRM API properties object). Example for a note: { "hs_note_body": "Hello from Pipedream" }. |

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

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: "hubspot-create-engagement",
  arguments: {
    engagementType: "Engagement Type",
    toObjectType: "Associated Object Type",
  },
})
```

**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: "hubspot-create-engagement",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    hubspot: { authProvisionId: "apn_xxxxxxx" },
    engagementType: "Engagement Type",
    toObjectType: "Associated Object Type",
  },
})

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": "hubspot-create-engagement",
    "configured_props": {
      "hubspot": { "authProvisionId": "apn_xxxxxxx" },
      "engagementType": "Engagement Type",
      "toObjectType": "Associated Object Type"
    }
  }'
```

---

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