API

The endpoints behind our booking and contact forms. Machine-readable spec: /openapi.json · catalog: /.well-known/api-catalog

Before you call it

Booking creates a real event on our calendar and an inquiry reaches a real person. Use the write endpoints only on behalf of someone who asked you to. All times are Mountain Time (America/Denver). Requests and responses are JSON; the REST endpoints below need no API key.

GET /available-slots?date=YYYY-MM-DD

Open start times for a date. Slots start every 30 minutes: Monday, Tuesday, Thursday and Friday from 10:00 to 17:00, Wednesday from 10:00 to 12:00, none on weekends. Each call lasts 60 minutes. Today's slots are listed only if they start at least 30 minutes from now.

{ "date": "2026-10-20", "slots": [ { "hour": 10.5, "label": "10:30 AM" } ] }

POST /book

Books a 60-minute strategy call. slotHour must be an hour value returned by /available-slots for the same date. Returns 409 if someone took the slot first.

{
  "date": "2026-10-20", "slotHour": 10.5,
  "name": "Jane Doe", "business": "Doe Plumbing",
  "phone": "+1 406 555 0100", "email": "[email protected]",
  "consent": false
}

POST /contact

Sends an inquiry. firstName, lastName and email are required; phone, company, revenue and message are optional.

{ "firstName": "Jane", "lastName": "Doe", "email": "[email protected]", "message": "..." }

MCP, A2A and OAuth

The same three actions are available to AI agents as an MCP server at /mcp (Streamable HTTP) and an A2A 1.0 agent at /a2a (JSON-RPC). Both need an OAuth 2.1 bearer token. Agents self-register at POST /oauth/register with no account, then use client_credentials or authorization_code with PKCE. Tokens last one hour.

Details: /auth.md · MCP server card · A2A agent card · agent skill

Consent

consent records whether the person agreed to be contacted by phone and text under the disclosure shown on this site. Send true only if the person themselves agreed; otherwise send false or leave it out.