Skip to main content
All 35 tools run through the same service layer as the REST API. Every input is JSON Schema validated; outputs are JSON-scrubbed per the caller’s scope.

Locations

list_locations

List locations this API key can access (usually just one — keys are location-scoped). Scope: locations:read Input: {}

get_location

Fetch a location by UUID or slug. Scope: locations:read Input: { id: string }

update_location

Update mutable location fields. Scope: locations:write Input: { id: string, name?, legal_name?, industry?, timezone?, website_url?, owner_cell?, service_areas?, zip_codes?, travel_radius_miles? }

Members

list_members

List location members. Emails/phones masked when read over API. Scope: members:read Input: { location_id: string }

list_api_keys

List API keys issued for this location (prefix + scopes only — never secrets). Scope: api_keys:read Input: { location_id }

Agent configuration

get_agent_config

Voice, greetings, personality sliders, emergency keywords, compliance guardrails. Scope: agent:read Input: { location_id }

update_agent_config

Update any subset. Scope: agent:write Input: { location_id, voice_id?, voice_name?, greeting_primary?, greeting_after_hours?, greeting_emergency?, greeting_voicemail?, greeting_cant_help?, personality_* (0..1)?, emergency_keywords?, vulnerable_signals?, transfer_number?, transfer_ring_seconds?, ai_self_id?, two_party_consent?, pricebook_lock?, no_pii_collection?, profanity_filter? }

list_business_hours

7-day weekly hours. Scope: agent:read Input: { location_id }

update_business_hours

Replace the whole week in one call. Scope: agent:write Input: { location_id, hours: [{ day_of_week (0..6), is_open, open_time?, close_time? }] }

get_call_forwarding

How calls route to the AI. Scope: agent:read Input: { location_id }

update_call_forwarding

Change routing mode. Scope: agent:write Input: { location_id, mode?: "replace"|"forward_all"|"forward_busy"|"forward_hours", existing_business_line? }

FAQs & pricebook

list_faqs · add_faq · update_faq · delete_faq

CRUD on what the AI quotes. All require location_id. Scopes: faqs:read / faqs:write

list_pricebook · add_pricebook_item

Pricebook items (service names with prices/ranges). Scopes: faqs:read / faqs:write

Calls

list_calls

Recent calls. Phones masked; transcripts/recordings gated by scope. Scope: calls:read · optional transcripts:read · optional recordings:read Input: { location_id, outcome?, emergency?, since?, limit? }

get_call

Single call detail. Same scrubbing. Scope: calls:read (+ transcripts/recordings as above) Input: { location_id, call_id }

Leads

list_leads · create_lead · update_lead

Pipeline operations. Scopes: leads:read / leads:write

Bookings

list_bookings · create_booking

Appointments. Scopes: bookings:read / bookings:write

Insights

get_insights_summary

Rolled-up metrics over the last N days. Scope: insights:read Input: { location_id, days?: 1..90 }

Notifications

get_notification_settings · update_notification_settings · list_notification_log

Scopes: agent:read / agent:write

Billing (read-only)

get_subscription

Subscription state. Upstream billing IDs omitted. Scope: locations:read Input: { location_id }

Integrations

list_integration_catalog

Static catalog of every integration PickupBell knows about. No scope required.

list_integrations

Connected integrations for the location. Scope: locations:read

connect_webhook_integration

Attach a Slack / Zapier / Make / n8n / Cal.com by URL. Scope: locations:write Input: { location_id, provider, webhook_url, label? }

disconnect_integration

Disconnect a provider. Scope: locations:write Input: { location_id, provider }