# List Users — Harvest

> List users in the Harvest account, automatically following pagination up to 200 users. Use this to discover user IDs for Create User Assignment, Create Timesheet Entry, and other tools that accept a User ID. Example: call with…

- Key: `harvest-list-users`
- Type: Action (Read-only)
- Version: 0.0.1
- App: Harvest (`harvest`) — https://pipedream.com/apps/harvest.md
- This page (HTML): https://pipedream.com/apps/harvest/actions/list-users
- Hints: read-only · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/harvest/actions/list-users/list-users.mjs

## Description

List users in the Harvest account, automatically following pagination up to 200 users. Use this to discover user IDs for **Create User Assignment**, **Create Timesheet Entry**, and other tools that accept a User ID. Example: call with isActive=true to find Alan Grant's user ID before logging time on his behalf. [See the documentation](https://help.getharvest.com/api-v2/users-api/users/users/#list-all-users).

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `accountId` | `string` | Yes | Your Harvest account ID, e.g. 1234567. Run List Account ID Options to find it. |
| `isActive` | `boolean` | No | Only return active or inactive users. |
| `updatedSince` | `string` | No | Only return records updated since this UTC datetime, e.g. 2019-06-25T15:30:00Z. |

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

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: "harvest-list-users",
  arguments: {
    accountId: "Account ID",
    isActive: true,
  },
})
```

**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: "harvest-list-users",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    harvest: { authProvisionId: "apn_xxxxxxx" },
    accountId: "Account ID",
    isActive: true,
  },
})

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": "harvest-list-users",
    "configured_props": {
      "harvest": { "authProvisionId": "apn_xxxxxxx" },
      "accountId": "Account ID",
      "isActive": true
    }
  }'
```

---

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