Everything you need to ship.
Tutorials for the builders, guides for going live, answers to common questions, and the portal API reference.
Your first agent on the Canvas
Pick a template, rename the nodes, tune tone and creativity, connect the flow, hit Deploy.
5 minThe guided Studio
Eleven friendly steps from “what should it do” to a priced, submitted build — no canvas required.
3 minTracking a build
Create an account, watch your project timeline, and message the team from your dashboard.
How builds & pricing work
Writing good agent instructions
Feeding it knowledge
Going live: what happens after you submit
Do I need to know how to code?
Will the agent sound like a robot?
What if it gives a wrong answer?
Who owns what gets built?
How fast do you respond?
Connect real business tools from Portal → Integrations. Every connection is real OAuth and real API calls — there's no simulated "Connected" state. Until the server has credentials configured for a provider, its card there honestly says so.
Google Calendar
create_calendar_event tool-call.Zoom
create_zoom_meeting and share the real join link. The same action is available outside chat via POST /api/v1/meetings for API-key customers, and every scheduled meeting is listed under the Zoom card in Portal → Integrations.Meta (Facebook/Instagram)
leadgen_id, so re-syncing never creates duplicates. Runs on a real-time webhook where Meta app review allows it, a manual “Sync now” button otherwise, and a scheduled daily fallback. Also publishes real text/link posts to the connected Page and returns the real post id.The portal speaks JSON to this app's own /api/** route handlers. Every request is authenticated with a bearer access token that refreshes automatically on expiry. Your account is created from the dashboard.
POST /api/auth/login
Content-Type: application/json
{ "email": "you@business.com", "password": "..." }/api/auth/signup · /api/auth/login · /api/auth/logout · /api/auth/refresh
orgName, email, password (8+ chars), and an optional name. Refresh exchanges a refresh token for a new session automatically — the front-end client handles this for you on any 401./api/auth/request-password-reset · /api/auth/reset-password
/api/agents
/api/agents/[id]/messages
/api/leads
name, email, optional phone, a source, and an optional config object./api/billing/checkout · /api/billing/portal · /api/billing/webhook
/api/v1/agents · API-key access
Programmatic access to your agents using an API key minted in your Client Portal (Account → API keys). Send the key as Authorization: Bearer whai_… or X-API-Key: whai_…. Revoked keys stop working immediately; every call updates the key's last-used timestamp.
curl https://west-hill-ai-v1.vercel.app/api/v1/agents \ -H "Authorization: Bearer whai_YOUR_KEY"
/api/v1/agents/:id/chat · chat with your agent by API
Send a message to one of your ACTIVE agents and get its real AI reply — the same OpenAI pipeline, conversation persistence, and usage metering as the in-app chat. Pass back the returned conversationId to continue a thread.
curl -X POST https://west-hill-ai-v1.vercel.app/api/v1/agents/AGENT_ID/chat \
-H "Authorization: Bearer whai_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "What are your hours?"}'POST /api/v1/meetings
topic, startIso, and durationMinutes, and returns the real joinUrl.POST /api/v1/messages
agentId, message, and an optional conversationId to continue an existing conversation (omit it to start a new one)./api/v1/usage · your plan and usage by API
Your org's real plan, usage allotment, renewal date, and tokens used in the window (?days=1..90, default 30) — the same numbers your dashboard shows.
curl https://west-hill-ai-v1.vercel.app/api/v1/usage -H "Authorization: Bearer whai_YOUR_KEY"
/api/v1/tracking-sites · pull your web analytics by API
List the websites you track with West Hills Web Analytics, then pull real stats for any of them: views 24h/7d/30d, a daily series, and top pages, referrers, and countries.
curl https://west-hill-ai-v1.vercel.app/api/v1/tracking-sites -H "Authorization: Bearer whai_YOUR_KEY" curl https://west-hill-ai-v1.vercel.app/api/v1/tracking-sites/SITE_ID/stats -H "Authorization: Bearer whai_YOUR_KEY"
/api/v1/leads · pull your CRM leads by API
Lists your org's leads (synced ad-platform inquiries, agent-conversation leads), newest first. Filter with ?status=NEW|CONTACTED|QUALIFIED|CLOSED and page with ?page= / ?pageSize= (default 20, max 100).
curl https://west-hill-ai-v1.vercel.app/api/v1/leads?status=NEW -H "Authorization: Bearer whai_YOUR_KEY"