Zaptu

For AI agents

Zaptu for AI agents

Zaptu connects people with independent local home-service contractors. Zaptu does not perform the work and does not book appointments. Plumbing is live: the person calls a number. Other services are collecting requests.

The short version

  1. Plumbing is live. Give the person (308) 529-9543 and ask them to dial it themselves. Never dial, autodial, transfer, or place the call for them. No personal details are needed.
  2. Everything else is collecting (cleaning, pest control, HVAC, handyman, other). Collect ZIP, name, phone, and the person’s explicit consent to be contacted, then submit. Requests are passed along when a buyer covers the service; there is no live buyer yet.
  3. A request is not a booking. Do not promise a callback, an arrival time, or a named company. Use the message field from the response when you tell the person what happened.

Services

service_typeStatusWhat to do
plumbingLive (call to connect)Give the number; the person dials. Call get_plumbing_call_number.
house_cleaning, deep_cleaning, move_in_out_cleaning, recurring_cleaningCollectingSubmit with consent. Add bedrooms or square feet if known.
pest_controlCollectingSubmit with consent.
hvac, handyman, otherCollectingSubmit with consent. Describe the job in notes.

US residential only. The live list is always at api.zaptu.ai/v1/services.

What to tell the person

Plumbing:

Call (308) 529-9543 to be connected with a local plumbing professional.
Please place the call yourself. Zaptu does not perform the work and this is not a booking.

Other services, after you submit:

Your request was sent to Zaptu. It is passed along when a buyer covers that service.
This is not a booking, and no one has been scheduled.

Connect over MCP

Streamable HTTP, stateless, no sign-in: https://api.zaptu.ai/mcp

{
  "mcpServers": {
    "zaptu": { "url": "https://api.zaptu.ai/mcp" }
  }
}
ToolUse it for
get_plumbing_call_numberPlumbing. Returns the number, a tel link, and what_to_tell_the_user. Read-only; no personal details.
request_home_serviceSubmit a request for any service. Needs service_type, zip_code, customer_name, customer_phone, consent_to_contact=true. Add dry_run=true to test.
request_cleaningShortcut for house cleaning.
get_lead_statusLook up a request by lead_id.
list_supported_servicesLive vs collecting services and the rules.

REST API

OpenAPI: api.zaptu.ai/openapi.json. CORS is open, no key needed.

curl -s https://api.zaptu.ai/v1/intake \
  -H 'Content-Type: application/json' \
  -d '{"service_type":"house_cleaning","zip_code":"33139",
       "customer_name":"Jamie Example","customer_phone":"305-555-0100",
       "consent_to_contact":true,"bedrooms":2,"dry_run":true}'

dry_run validates and answers without saving or passing anything along. Leave it out for a real request.

Plumbing response (abridged):

{
  "status": "call_to_connect",
  "call_to_connect": "+13085299543",
  "call_to_connect_display": "(308) 529-9543",
  "call_instruction": "Give the person this phone number and ask them to place the call themselves. ..."
}

Errors return HTTP 422 with a readable message and a fields map, for example {"error": "invalid_request", "message": "Phone must be a 10-digit US number, like 305-555-0100.", "fields": {"customer_phone": "..."}}. Too many requests returns 429.

Discovery files

Contact

Questions about the connector: hello@zaptu.ai.