{"name":"KaiCallsAgent","description":"AI-powered call answering service for law firms, home service businesses, and AI agents. Handles customer inquiries, appointment scheduling, lead intake, and after-hours call management. Programmatic signup via email OTP with a no-card trial; optional payment-mode signup.","url":"https://www.kaicalls.com","version":"1.0","protocolVersion":"0.3.0","provider":{"organization":"KaiCalls","url":"https://www.kaicalls.com"},"documentationUrl":"https://www.kaicalls.com/docs/api","preferredTransport":"JSONRPC","additionalInterfaces":[{"url":"https://www.kaicalls.com/api/mcp","transport":"JSONRPC"}],"supportedInterfaces":[{"url":"https://www.kaicalls.com/api/mcp","transport":"JSONRPC"}],"capabilities":{"streaming":false,"pushNotifications":false},"authentication":{"schemes":["bearer"],"description":"API key returned after verified signup provisioning, not the initial OTP challenge. Pass as Authorization: Bearer <api_key>."},"skills":[{"id":"phone-answering","name":"AI Phone Answering","description":"Answer inbound calls 24/7 with a customizable AI voice agent. Captures leads, books appointments, and transfers to humans when needed."},{"id":"lead-intake","name":"Lead Intake & Qualification","description":"Collect caller information, qualify leads by case type or service need, and push to CRM."},{"id":"appointment-booking","name":"Appointment Booking","description":"Book appointments via Google Calendar integration during calls."},{"id":"outbound-calls","name":"Outbound Calling","description":"Place outbound calls to leads with TCPA-compliant scheduling and follow-ups."},{"id":"sms-followup","name":"SMS Follow-Up","description":"Send automated SMS follow-ups after calls or missed calls."},{"id":"sdr-automation","name":"SDR Pipeline Automation","description":"Automated sales development: segments leads into actionable buckets (speed-to-lead, warm demo, trial-stuck, etc.), decides the next-best action (call/email/SMS/skip/escalate), enforces cadence rules, and records every touch. Accessible via /api/sdr/* endpoints for programmatic pipeline management."}],"endpoints":{"signup":{"url":"https://www.kaicalls.com/api/v1/signup","method":"POST","description":"Default activation_mode=otp: first send an email verification code (HTTP 200, status=otp_sent), then submit otp_code and challenge_id with the same signup fields to provision a no-card trial. Optional activation_mode=payment uses x402 when configured, otherwise deferred Stripe Checkout. Inspect response state and setup_status; HTTP 200 alone does not prove a working line, owner-phone setup, or verified forwarding.","contentType":"application/json","body":{"business_name":{"type":"string","required":true},"email":{"type":"string","required":true},"business_type":{"type":"string","required":false},"website":{"type":"string","required":false},"phone_forward_to":{"type":"string","required":false},"activation_mode":{"type":"string","required":false,"default":"otp","enum":["otp","payment"]},"otp_code":{"type":"string","required":false,"description":"Email verification code for OTP step 2."},"challenge_id":{"type":"string","required":false,"description":"Challenge returned by OTP step 1."},"plan_id":{"type":"string","required":false,"default":"backup","description":"Payment-mode plan selection; does not set no-card trial terms."}},"returns":{"challenge_id":"string (OTP step 1 only)","expires_in_seconds":"number (OTP step 1 only)","api_key":"string (after account provisioning; absent from OTP step 1)","business_id":"string (after account provisioning)","agent_id":"string | null","phone_number":"string | null","dashboard_url":"string","trial_ends_at":"string","provisioning_deferred":"boolean","trial_minutes_included":"number (25 for no-card OTP trial)","setup_status":"object (component provisioning and remaining setup checks)","payment_capture":"otp_trial | x402 | stripe_checkout | manual","checkout_url":"string (present when Stripe Checkout is created)","dashboard_magic_link":"string (one-time owner login link for dashboard access)","password_setup_link":"string (where the owner sets a password after using the one-time link)","status":"'otp_sent' with HTTP 200 awaits email verification. 'provisioning_failed' with HTTP 503 indicates incomplete provisioning. Payment-mode HTTP 200 may be provisioning_deferred; no HTTP status alone proves completed activation."}},"sdr_pipeline":{"url":"https://www.kaicalls.com/api/sdr/pipeline","method":"GET","description":"List leads in the SDR pipeline with segment, score, touch count, and next action. Pass ?businessId=<uuid>. Optional: &segment=<segment>, &limit=<n> (default 100). Segments include: speed_to_lead, fresh_demo_caller, warm_demo_caller, cooling_demo, new_trial_stuck, trial_going_dark, trial_ending, contacted_no_reply, exhausted, churned_recent.","authentication":"Bearer API key (sdr:read scope) OR user session","scope":"sdr:read","query":{"businessId":{"type":"string","required":true},"segment":{"type":"string","required":false},"limit":{"type":"integer","required":false}},"returns":{"businessId":"string","enabled":"boolean","summary":{"total_leads":"integer","actionable":"integer","needs_manual":"integer"},"leads":"array of lead objects with segment, score, touch_count, next_action, paused"}},"sdr_action":{"url":"https://www.kaicalls.com/api/sdr/action","method":"POST","description":"Trigger a single SDR action on a lead. Actions: call, email, sms, skip, pause, resume. Enforces cadence rules (min_touch_gap_hours, max_touches) and records the touch in sdr_activity_log.","authentication":"Bearer API key (sdr:write scope) OR user session","scope":"sdr:write","contentType":"application/json","body":{"businessId":{"type":"string","required":true},"leadId":{"type":"string","required":true},"action":{"type":"string","required":true,"enum":["call","email","sms","skip","pause","resume"]}},"returns":{"success":"boolean","action":"string","leadId":"string","detail":"string (optional, on success)","error":"string (optional, on failure)","nextAllowedAt":"string (ISO timestamp, if rate-limited by cadence)"}},"sdr_config":{"url":"https://www.kaicalls.com/api/sdr/config","methods":["GET","PUT"],"description":"Read or update per-business SDR configuration (enabled flag, cadence windows, auto-channel toggles, SDR agent ID for outbound calls, default email account).","authentication":"Bearer API key (sdr:read for GET, sdr:write for PUT) OR user session","scopes":{"GET":"sdr:read","PUT":"sdr:write"},"getQuery":{"businessId":{"type":"string","required":true}},"putBody":{"businessId":{"type":"string","required":true},"enabled":{"type":"boolean","required":false},"min_touch_gap_hours":{"type":"integer","required":false},"max_touches":{"type":"integer","required":false},"auto_call":{"type":"boolean","required":false},"auto_email":{"type":"boolean","required":false},"auto_sms":{"type":"boolean","required":false},"sdr_agent_id":{"type":"string","required":false},"business_hours_start":{"type":"integer","required":false,"description":"0-23"},"business_hours_end":{"type":"integer","required":false,"description":"0-23"},"email_from_account_id":{"type":"string","required":false}}},"sdr_run":{"url":"https://www.kaicalls.com/api/sdr/run","method":"POST","description":"Manually trigger a full pipeline review + action dispatch for a business. Pass dryRun=true to preview actions without dispatching. Fails 400 if SDR is not enabled for the business.","authentication":"Bearer API key (sdr:write scope) OR user session","scope":"sdr:write","contentType":"application/json","body":{"businessId":{"type":"string","required":true},"dryRun":{"type":"boolean","required":false}},"returns":{"success":"boolean","summary":{"calls_queued":"integer","emails_queued":"integer","sms_sent":"integer","escalated":"integer","failed":"integer"},"results":"array of dispatch results"}},"sdr_report":{"url":"https://www.kaicalls.com/api/sdr/report","method":"GET","description":"Aggregated SDR pipeline report: action counts, outcomes, hot leads, stale leads. Pass ?businessId=<uuid>. Optional: &period=today|week|month (default week).","authentication":"Bearer API key (sdr:read scope) OR user session","scope":"sdr:read","query":{"businessId":{"type":"string","required":true},"period":{"type":"string","required":false,"enum":["today","week","month"]}}},"sdr_activity":{"url":"https://www.kaicalls.com/api/sdr/activity","method":"GET","description":"Recent SDR activity log entries. Pass ?businessId=<uuid>. Optional: &leadId=<uuid>, &limit=<n> (default 50, max 200).","authentication":"Bearer API key (sdr:read scope) OR user session","scope":"sdr:read","query":{"businessId":{"type":"string","required":true},"leadId":{"type":"string","required":false},"limit":{"type":"integer","required":false}}},"sdr_cron":{"url":"https://www.kaicalls.com/api/cron/sdr-pipeline","method":"GET","description":"Scheduled SDR pipeline runner (every 2h). Reviews + dispatches for every business with SDR enabled. Cron-secret protected; not callable by API key or session."},"business_profile":{"url":"https://www.kaicalls.com/api/v1/business/profile?handle={handle}","method":"GET","description":"Public, unauthenticated structured-answer endpoint for ONE KaiCalls-served business: services, hours, pricing, service area, live availability, and FAQ — the same information its voice agent gives any caller. {handle} is that business's business_id (UUID) or public phone number."},"business_agent_card":{"url":"https://www.kaicalls.com/api/v1/business/agent-card?handle={handle}","method":"GET","description":"Per-business A2A-style capability card (this document's per-business analogue) — resolvable for any KaiCalls-served business via the same {handle}. Advertises that business's skills, live availability, and its business_profile endpoint. This is the discovery entry point for an agent that already knows a specific business is on KaiCalls and wants its structured endpoint. {handle} may also be the business's booking page address; when the business takes online bookings, the card lists public endpoints to read services, check open times, and book."},"directory_search":{"url":"https://www.kaicalls.com/api/v1/directory-search?q={query}&category={category}&city={city}&state={state}","method":"GET","description":"Public, unauthenticated search of businesses listed in the KaiCalls phone book. Each result has the public phone number, open-now status, and a booking_url when the business takes online bookings."},"business_booking":{"url":"https://www.kaicalls.com/api/book/confirm","method":"POST","description":"Public, unauthenticated booking for a business's online booking page — read its agent card first for the services and open-times endpoints and the exact body. Requires the customer's real name and email and an idempotency key; the customer is emailed a confirmation and a change link."}},"pricing":{"model":"subscription","currency":"USD","plans":[{"name":"Kai Backup","price":10,"unit":"month","minutes":48,"answeredCalls":20,"phoneNumbers":1,"custom":false},{"name":"Kai Answering","price":79,"unit":"month","minutes":408,"answeredCalls":170,"phoneNumbers":1,"custom":false},{"name":"Kai Office","price":349,"unit":"month","minutes":1920,"answeredCalls":800,"phoneNumbers":1,"custom":false}],"overage":"There are no per-minute overage charges. Your plan includes an expected monthly call allowance. If your call volume stays higher, we recommend the next plan and notify you before anything changes. You can choose to keep your current plan, and we move you back down if volume drops.","trial":{"minutes":25,"usagePeriod":"lifetime_trial","requiresPayment":false,"verification":"email OTP","capture":"Default OTP signup requires no card. Calendar expiration backstops still apply; inspect trial_ends_at and activation status. Payment mode is optional."}},"payment":{"x402":{"enabled":false,"network":"eip155:8453","asset":"USDC","price":"$5.00","description":"Optional activation_mode=payment only, when enabled: send request without a payment header, receive 402 with requirements (Stripe-issued deposit address + X-Payment-Challenge id), sign the transfer, and retry with a PAYMENT-SIGNATURE header echoing the challenge id.","facilitator":"Settled via Stripe Machine Payments (crypto deposit PaymentIntents) when X402_PROVIDER=stripe, or a generic x402 facilitator otherwise."},"stripe":{"enabled":true,"description":"Standard card/subscription payments via Stripe Checkout. Payment-mode signup returns checkout_url when x402 is not used; default OTP signup does not require payment. Stripe also acts as the x402 machine-payments facilitator for crypto (USDC) settlement."}}}