Harvest ACTION
List Invoices
List invoices with optional filters, automatically following pagination up to 200 invoices. Use this to discover invoice IDs for Get Invoice, Update Invoice, or Delete Invoice. Example: call with clientId set to InGen Corp's client ID and state="open" to find their unpaid invoices. See the documentation.
- Action
- Read only
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Harvest account once, then configure and run List Invoices 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: "harvest-list-invoices",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
harvest: { authProvisionId: "apn_xxxxxxx" },
accountId: "Account ID",
clientId: "Client ID",
},
})
console.log(result)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-invoices",
"configured_props": {
"harvest": { "authProvisionId": "apn_xxxxxxx" },
"accountId": "Account ID",
"clientId": "Client ID"
}
}'// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{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-invoices",
arguments: {
accountId: "Account ID",
clientId: "Client ID",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
accountId Account ID | string | Your Harvest account ID, e.g. 1234567. Run List Account ID Options to find it. Required |
clientId Client ID | string | Free-form client ID, e.g. 5735776. Run List Clients first to find valid IDs. Optional |
projectId Project ID | string | Free-form project ID, e.g. 14308069. Run Get Projects first to find valid IDs. Optional |
updatedSince Updated Since | string | Only return records updated since this UTC datetime, e.g. 2019-06-25T15:30:00Z. Optional |
from From | string | Only return invoices with an issue_date on or after this date, YYYY-MM-DD, e.g. 2026-09-01. Optional |
to To | string | Only return invoices with an issue_date on or before this date, YYYY-MM-DD, e.g. 2026-09-30. Optional |
state State | string | Filter by state. One of: draft, open, paid, closed. Optional |
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
- harvest-list-invoices
- Version
- 0.0.1
- App
- Harvest
- Authentication
- OAuth
- Read-only
- Yes
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗