wittle labs

REFERENCE

Tools

The tools an assistant sees when it connects, with their inputs and outputs. This page is generated from the live connector’s tools/list, last synced September 30, 2026.

Results come back as text (JSON) plus structuredContent matching the output schema. Tools marked sign-in trigger sign-in on first use (see Connect). Changes to these tools are additive only (see Compatibility).

search_providers

read-onlyno sign-in

Find providers for a service the customer describes in their own words (e.g. "no hot water", "AC not cooling", "breaker keeps tripping"). Matches the description against service categories and returns providers that cover the ZIP code. No sign-in needed. If the description is a life-safety problem (gas, carbon monoxide, electrical fire/sparking) it returns safety guidance and an emergency phone instead of providers.

Input

FieldTypeRequiredNotes
needstring (≤ 300 chars)yes
zipstring (pattern ^\d{5}(-\d{4})?$)yes
urgency"routine" | "soon" | "emergency"—
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
safetyobjectyes
safety.triggeredbooleanyes
safety.category"gas_smell" | "carbon_monoxide" | "electrical_fire" | "electrical_shock" | "flooding_electrical" | "sewage_backup" | nullyes
safety.guidancestring | nullyes
outcome"covered" | "no_coverage" | "no_match" | "safety"yes
categoryobject | nullyes
providersobject[]yes
near_missobject[]yes
next_stepstringyes

get_provider_details

read-onlyno sign-in

Return one provider's categories, services (with how each is priced), coverage ZIPs, emergency phone, and the business's note to customers. Read-only; call it after search_providers to decide where to book.

Input

FieldTypeRequiredNotes
provider_idstringyes
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
providerobjectyes
provider.idstringyes
provider.namestringyes
provider.timezonestring (pattern ^[A-Za-z]+(?:\/[A-Za-z0-9_+-]+)*$)yes
provider.emergency_phonestring (e164, pattern ^\+[1-9]\d{6,14}$)yes
provider.pausedbooleanyes
provider.categoriesobject[]yes
provider.servicesobject[]yes
provider.coveragestring (pattern ^\d{5}(-\d{4})?$)[]yes
provider.booking_policy_summarystringyes
provider.customer_notestring | nullyes
next_stepstringyes

get_availability

read-onlyno sign-in

List real bookable windows from a provider's scheduler for one service (identified by service_id) and ZIP. Each option carries an opaque signed option_id, window, timezone, source, and observed_at. A 14-day range maximum applies; schedulers without real availability return clearly-labeled preferred-time requests. Read-only.

Input

FieldTypeRequiredNotes
provider_idstringyes
service_idstringyes
zipstring (pattern ^\d{5}(-\d{4})?$)yes
date_fromstringyes
date_tostringyes
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
optionsobject[]yes
next_stepstringyes
intakeobject—
intake.problem_labelstring—
intake.email_requiredboolean—
intake.default_statestring—
intake.questionsobject[]yes

prepare_booking

sign-in

Turn a chosen option_id into an immutable, human-readable booking summary without booking anything. Runs the life-safety guard and the provider's policy, then returns preparation_id, summary, expected_outcome, and a 15-minute expiry. Pass the preparation_id to confirm_booking only after the customer approves.

Input

FieldTypeRequiredNotes
option_idstringyes
customerobjectyes
customer.namestringyes
customer.phonestring (e164, pattern ^\+[1-9]\d{6,14}$)yes
customer.emailstring (email, pattern ^(?:[A-Za-z0-9_'+\-]+\.)*[A-Za-z0-9_'+\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$)—
addressobjectyes
address.line1stringyes
address.line2string—
address.citystringyes
address.statestring (pattern ^[A-Z]{2}$)—
address.zipstring (pattern ^\d{5}(-\d{4})?$)yes
jobobjectyes
job.problemstring (≤ 1000 chars)yes
job.access_notesstring—
job.urgency"routine" | "soon" | "emergency"yes
answersmap of string | number | boolean | string[]—Answers to the business's questions, keyed by question key. get_availability returns that business's intake.questions for the chosen service; `required: true` means the booking cannot be prepared without it. Send a yes/no answer as true or false, a multi_select answer as an array, a date as YYYY-MM-DD and a number as a number. When something required is missing, this tool replies with what to ask the customer and stores nothing.
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
preparation_idstringyes
summarystringyes
expected_outcome"AUTO_CONFIRM" | "REQUEST" | "HANDOFF"yes
expires_atstringyes

confirm_booking

idempotentsign-in

Book an approved preparation exactly once. Confirm only after the customer approves the summary. Returns booking_id, status, external_ref, and next_step. Idempotent on idempotency_key, so repeating the same key returns the same booking.

Input

FieldTypeRequiredNotes
preparation_idstringyes
idempotency_keystringyes
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
booking_idstringyes
status"PREPARED" | "EXPIRED" | "SUBMITTING" | "CONFIRMED" | "PENDING_PROVIDER" | "HANDOFF_REQUIRED" | "FAILED" | "OUTCOME_UNKNOWN"yes
external_refstring—
next_stepstringyes

get_booking_status

idempotentsign-in

Check a booking's status by booking_id. Returns status, external_ref, last_checked_at, and next_step. For an unknown or provider-pending outcome, resolves the true state through the provider's scheduler when it supports status lookup — never by creating the booking again.

Input

FieldTypeRequiredNotes
booking_idstringyes
intentstring—One short sentence on what the customer is trying to do. Never include names, phone numbers, email addresses, or street addresses.

Output

FieldTypeRequiredNotes
booking_idstringyes
status"PREPARED" | "EXPIRED" | "SUBMITTING" | "CONFIRMED" | "PENDING_PROVIDER" | "HANDOFF_REQUIRED" | "FAILED" | "OUTCOME_UNKNOWN"yes
external_refstring—
last_checked_atstringyes
next_stepstringyes

Maintainers: refresh with node scripts/sync-scheduling-tools.mjs after a release.