First-party app
Housecall Pro

Housecall Pro

Housecall Pro field-service management: customers, jobs, estimates, leads, invoices, scheduling and dispatch over the Housecall v1 public API.

stable Customer Relationship ManagementCalendar & SchedulingFinance & Accounting

About

Housecall Pro ships in the w6w first-party pack. It declares 39 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.housecallpro
Version
0.1.3
Author
w6w
Licence
MIT
Categories
Customer Relationship Management · Calendar & Scheduling · Finance & Accounting

Overview

Housecall Pro runs the day-to-day operations for home-service businesses — plumbers, HVAC and electrical contractors, cleaners and more — and this app puts that operational data into a workflow. Create and update customers, look up and create jobs, schedule and dispatch them to the right technician, and manage line items and notes on a job as it moves through the pipeline.

On the sales side, list and read estimates, approve or decline the individual options a customer was offered, and convert a qualified lead straight into a job or an estimate. Read invoices, browse the price book of services you already have on file, and check which zip codes or addresses a service zone actually covers.

Reference data rounds it out: employees, tags, lead sources, job types, routes and pipeline statuses are all readable, so a workflow can label and route work using the same vocabulary Housecall Pro’s own UI does.

Build with Housecall Pro

Three routes to the same 39 actions. The Workflow tab is generated from Housecall Pro's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

List Booking Windows

booking-window-list

List the windows a job or estimate can be booked into, from the company's Online Booking settings and the employees' actual open slots.

Get Company

company-get

Fetch the company profile. Its `locations` array holds the location ids the X-Company-Id field on every other action expects.

Create Customer Address

customer-address-create

Add an address to a customer. The id it returns is the `address_id` Create Job requires.

Create Customer

customer-create

Create a customer, optionally with one or more addresses.

Get Customer

customer-get

Fetch one customer by id. The response carries the customer's `addresses` array, which is where the address id a job needs comes from.

Find Customers

customer-list

Search customers by name, email, mobile number or address.

Update Customer

customer-update

Update a customer's attributes. Only the fields you set are sent. Addresses are managed separately, with Create Customer Address.

Find Employees

employee-list

List the active employees, with their roles and permissions. Deactivated employees are not returned and there is no documented way to include them.

Get Estimate

estimate-get

Fetch one estimate by id, with its options. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves. Find Estimates does accept one, and returns the same records.

Find Estimates

estimate-list

List estimates, filtered by customer, assigned employee, status or schedule dates.

Approve Estimate Options

estimate-option-approve

Mark one or more estimate options approved. If the company has 'automatically copy an approved estimate to a new job' enabled, this creates a job and returns its id in `copied_on_approval_to_job_id`.

Decline Estimate Options

estimate-option-decline

Mark one or more estimate options declined.

List Estimate Option Line Items

estimate-option-line-item-list

List the line items on one option of an estimate. Option ids come from Get Estimate's `options` array.

Find Events

event-list

List calendar events — the non-job entries on the schedule. Not webhook events.

Get Invoice

invoice-get

Fetch one invoice by uuid, with its line items, taxes, discounts and payments. Amounts are integers in cents.

Find Invoices

invoice-list

List invoices, filtered by status, customer, payment method, created/due/paid dates or outstanding amount. Amounts are integers in cents.

List Job Appointments

job-appointment-list

List a job's appointments. A multi-day job has more than one, which is also why Update Job Schedule refuses those jobs.

Create Job

job-create

Create a job for an existing customer and address. Line-item prices are integers in cents.

Dispatch Job

job-dispatch

Assign employees to a job. Send the full set — the response is the job's complete assigned employee list. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves.

Get Job

job-get

Fetch one job by id. Amounts are integers in cents. `recurrence_id` and `recurrence_status` are null unless the job belongs to a recurring series.

List Job Invoices

job-invoice-list

List the invoices for a job. Amounts are integers in cents. A job split across progress invoices returns several.

Add Job Line Item

job-line-item-create

Add one line item to a job. Housecall Pro rate-limits this endpoint specifically — to add several items to one job, use its bulk update instead of calling this in a loop.

List Job Line Items

job-line-item-list

List every line item on a job. Unpaginated — the whole list comes back in one call. Prices and costs are integers in cents.

Find Jobs

job-list

List jobs, filtered by customer, assigned employee, work status or schedule dates.

Add Job Note

job-note-create

Append a note to a job. Notes accumulate; this never replaces an existing one.

Update Job Schedule

job-schedule-update

Set a job's scheduled window, arrival window and dispatched employees. Refused for a multi-day job with more than one appointment — use the appointment actions for those. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves.

Add Job Tag

job-tag-add

Attach an existing tag to a job by tag id. Use Get Tags to find one, or Create Tag to make it first.

Get Job Types

job-type-list

List the company's job types. Filter by name — the endpoint documents no pagination parameters, only a name filter.

Convert Lead

lead-convert

Convert a lead into a job or an estimate. The response carries `job_id` or `estimate_id` depending on which was asked for.

Create Lead

lead-create

Create a lead. Supply either a customer id or an inline customer object, and either an address id or an inline address object.

Get Lead

lead-get

Fetch one lead by id. `conversions` lists the jobs or estimates it became, and is empty until it is converted.

Find Leads

lead-list

List leads, filtered by customer, status, assigned employee, tag or lead source.

Get Lead Sources

lead-source-list

List the available lead sources. `editable` is false for Housecall Pro's built-in ones.

Get Pipeline Statuses

pipeline-status-list

List the pipeline stages for leads, jobs or estimates. Returns an empty list — not an error — for an organization without pipeline enabled.

Find Price Book Services

price-book-service-list

Search the price book's services by name, description or task number. Materials and labor rates come back as empty lists unless expanded. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves.

Get Routes

route-list

List a day's routes — each groups an employee with their job appointments, events and estimates. Defaults to today. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves.

Get Service Zones

service-zone-list

List service zones, optionally filtered by zip code or address — which answers whether a given address is served at all. Requires an integration-partner credential: the reference lists only the Application API Key and OAuth token for this endpoint, not the Company API Key a Pro generates for themselves.

Create Tag

tag-create

Create a tag. Use Get Tags first if it may already exist — names are not unique.

Get Tags

tag-list

List the company's tags. Add Job Tag takes an id from here, not a name.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying Housecall Pro's real ids.

{
  "manifestVersion": "2",
  "name": "housecallpro-example",
  "steps": [
    {
      "id": "customer-address-create",
      "uses": {
        "app": "io.w6w.housecallpro",
        "action": "customer-address-create",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "customerId": "<customerId>",
        "street": "<street>",
        "city": "<city>"
      }
    }
  ]
}

Here are some of the things you can do

  • Create Customer Address

    perform
    customer-address-create
  • List Booking Windows

    read
    booking-window-list
  • Get Company

    read
    company-get
  • Create Customer

    perform
    customer-create
  • Get Customer

    read
    customer-get

+34 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for Housecall Pro, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to Housecall Pro. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "job-create",
  payload: {
    customerId: "<value>",
    addressId: "<value>",
    // invoiceNumber: "<value>",
    // schedule: "<value>",
    // assignedEmployeeIds: "<value>",
    // lineItems: "<value>",
    // tags: "<value>",
    // leadSource: "<value>",
    // notes: "<value>",
    // jobTypeId: "<value>",
    // businessUnitId: "<value>",
    // companyId: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action job-create --payload '{"customerId":"<value>","addressId":"<value>"}'

Give an AI agent Housecall Pro — without giving it Housecall Pro's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.housecallpro#customer-address-create",
    "input": {
      "customerId": "<customerId>",
      "street": "<street>",
      "city": "<city>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's Housecall Pro connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

Housecall Pro's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. Housecall Pro itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

Housecall Pro declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

Housecall Pro platform status

Statuspage summary at status.housecallpro.com. Informational only: none of its nineteen components covers api.housecallpro.com — the one named 'Add a job API' is the separate Partner Jobs intake API, not the public API this app calls. See the `api` check for the host the actions actually use.

dependency

Housecall Pro API reachability

Unsigned GET https://api.housecallpro.com/company. A 401 with Housecall Pro's own `{"message":"Unauthorized"}` body is the pass: it proves the API routed and answered. This says nothing about any credential.

quota

API request-rate headroom