Developers
Build with HeySale.
Everything you need to install, integrate, automate and extend the HeySale AI Website Salesperson.
HeySale installs on a website with one lightweight embed, connects to compatible AI systems through MCP, and integrates with external systems through APIs and webhooks.
Remote MCP endpoint
Transport: Streamable HTTP (remote MCP)
https://hey.sale/mcpThis is a protocol endpoint, not a webpage. Paste it into an MCP client rather than a browser.
Official MCP Registry
Published · Active- Identity
- io.github.heysale/heysale
- Version
- 1.1.0
- Server name
- HeySale — AI Website Salesperson
HeySale is published in the Official Model Context Protocol Registry, so compatible MCP clients and downstream directories can discover the server. Listing in an individual AI marketplace is a separate approval in each case.
View in Official MCP RegistryQuick start
1. Create your salesperson
Enter the website address in HeySale. She reads the site and learns what it sells.
2. Configure her
Set her name, greeting, objective, appearance, language and allowed domains.
3. Install HeySale
Copy the embed snippet from your dashboard and place it globally on the site.
4. Verify
Load an authorized page and confirm she launches. Installation is detected automatically.
The embed carries a key unique to your salesperson, so there is no generic snippet to copy from this page. Get your embed code from your HeySale dashboard.
Install HeySale on a website
HeySale is a single asynchronous script tag placed once, globally, before the closing </body> tag. The same snippet works on plain HTML, React and other single-page apps, WordPress, Shopify, Google Tag Manager and custom CMS templates — there is nothing platform-specific to install.
- The script loads asynchronously and does not block page rendering.
- Loading a page does not start a conversation; conversational resources begin only when a visitor engages.
- Domain authorization is enforced: the salesperson only runs on domains you have authorized.
- Installation is detected automatically and shown in your dashboard.
- Because the tag is global, she can stay with a visitor across pages.
- Adding it through a tag manager works the same way as adding it to a template.
Building on Lovable? See the Lovable integration and the HTTP provisioning guide.
Model Context Protocol (MCP)
Give compatible AI assistants and coding agents the ability to create and install a HeySale AI Website Salesperson.
Remote MCP endpoint
https://hey.sale/mcpTransport: Streamable HTTP (remote MCP)
Typical client config
{
"mcpServers": {
"heysale": {
"url": "https://hey.sale/mcp"
}
}
}MCP clients use different configuration formats. See the appropriate integration guide for your client — VS Code and GitHub Copilot use servers instead of mcpServers, and some clients accept only a URL.
Available MCP tools
create_website_salesperson
Create a HeySale AI Website Salesperson from a public website address.
Auth: None
“Add a salesperson to this website.”
check_salesperson_status
Check whether HeySale has finished reading and learning the website.
Auth: None
“Is the salesperson ready yet?”
get_salesperson_installation
Return the one-line install script, where it goes, and whether it has been detected on the live site.
Auth: None
“Give me the code to add to the site.”
verify_salesperson_installation
Confirm the salesperson is live, using HeySale's own telemetry rather than scraping the page — so it works with single-page apps, tag managers and deferred loading.
Auth: None
“Is it actually running on the site now?”
configure_salesperson
Change the salesperson's name, opening line or conversation objective.
Auth: Owner's HeySale API key
“Rename her to Ava and have her open by offering a quote.”
get_salesperson_results
Summarise conversations, leads and minutes used for the owner's own salesperson.
Auth: Owner's HeySale API key
“How many leads did the salesperson capture this month?”
Every tool response carries a next_action, and creation is idempotent per website, so an assistant calling twice does not create two salespeople. Creation also returns a persistent salesperson_id and a claim link the website owner uses to take ownership in HeySale — an assistant never has to ask them for an API key.
Typical workflow
- 1User intent
- 2AI invokes create_website_salesperson — the response carries a persistent salesperson_id and a claim link
- 3HeySale learns the website
- 4AI checks salesperson status
- 5AI retrieves the installation script
- 6AI adds HeySale to the website
- 7AI verifies the installation from HeySale telemetry
- 8AI hands the claim link to the website owner
- 9The website starts having sales conversations
Full server reference: /developers/mcp.
Use HeySale with AI builders and assistants
| Platform | Status | Guide |
|---|---|---|
| Lovable | Available | /lovable |
| ChatGPT | Custom MCP | /chatgpt |
| Claude | Available | /claude |
| Cursor | One-click install | /cursor |
| Replit | Custom MCP | /replit |
| GitHub Copilot | Custom MCP | /github-copilot |
| Any MCP client | Available | /integrations/mcp |
| v0 | Coming soon | /v0 |
| Bolt | Custom MCP | /bolt |
| Google Antigravity | Custom MCP | /antigravity |
| Kiro | Custom MCP | /kiro |
| Devin | Custom MCP | /devin |
| Windsurf | Custom MCP | /windsurf |
| Manus | Custom MCP | /manus |
| Perplexity | Coming soon | /perplexity |
Open integration resources
The public HeySale MCP repository contains public integration metadata, documentation and examples for HeySale’s hosted MCP service. It does not make the HeySale hosted application or backend open source — those remain proprietary. The repository’s LICENSE and NOTICE files are the authority.
- Repository
- heysale/heysale-mcp
- License
- Apache 2.0
- MCP Registry identity
- io.github.heysale/heysale
HeySale API
A small REST surface covers the same ground as the MCP tools, plus lead export. All responses are JSON. Provisioning endpoints are public; anything that reads a salesperson’s private data requires that salesperson’s API key, created in the dashboard under Developer.
| Method | Endpoint | Auth | Purpose |
|---|---|---|---|
| POST | /api/public/v1/integrations/salespeople | None | Create a salesperson from a website address. Returns immediately with the install script and a claim link. Accepts an Idempotency-Key header. |
| GET | /api/public/v1/integrations/salespeople/{id} | None | Build status for a salesperson. |
| PATCH | /api/public/v1/integrations/salespeople/{id} | API key | Update name, greeting or objective. |
| GET | /api/public/v1/integrations/salespeople/{id}/installation | None | The embed script, its placement, and whether it has been detected on the site. |
| GET | /api/public/v1/integrations/salespeople/{id}/results | API key | Conversation, lead and usage summary. Optional days=1..90. |
| GET | /api/public/v1/leads | API key | Paged lead export. Optional limit (1-100), since (ISO date), status, include_transcript. |
| GET | /api/public/v1/leads/{id} | API key | A single lead, optionally with its transcript. |
| GET | /api/public/integrations.json | None | Machine-readable registry of supported platforms, install methods and MCP details. |
Authentication
Keys look like hs_live_…, are shown once, are stored only as a hash, and are scoped to a single salesperson. Send them as Authorization: Bearer YOUR_API_KEY or X-Api-Key: YOUR_API_KEY. Revoke a key in the dashboard at any time.
Create a salesperson (curl)
curl -X POST https://hey.sale/api/public/v1/integrations/salespeople \
-H "content-type: application/json" \
-H "idempotency-key: your-unique-key" \
-d '{"website_url":"https://example.com","integration_source":"api"}'Export leads (curl)
curl https://hey.sale/api/public/v1/leads?limit=25 \
-H "authorization: Bearer YOUR_API_KEY"Common errors
| Code | HTTP | Meaning |
|---|---|---|
| invalid_url | 400 | The website address was missing, private or not a public https site. |
| not_ready | 409 | The salesperson is still reading the website. Check status again shortly. |
| forbidden | 401 | Missing or wrong API key for this salesperson. |
| not_found | 404 | No salesperson exists with that id. |
| rate_limited | 429 | Too many create requests from the same origin. |
| disabled | 503 | External provisioning is temporarily turned off. |
| internal_error | 500 | Unexpected failure on our side. Retry once, then report it. |
Failures return { ok: false, error: { code, message }, next_action }. Reasonable rate limits apply to protect service availability; salesperson creation is limited per origin. Visitor conversation traffic is protected separately from authenticated developer traffic.
Need something the endpoints above do not cover? hello@hey.sale.
Webhooks
Add endpoints in the dashboard under Developer, choose the events each one receives, and send a test delivery. Every delivery attempt is logged with its response status.
lead.captured
A new lead was created from a conversation or a form.
lead.updated
HeySale learned something material later — company, title, needs, qualification.
conversation.ended
A conversation finished, with its summary and duration.
Payload shape
{
"event": "lead.captured",
"sent_at": "2026-01-01T12:00:00.000Z",
"data": { "id": "…", "name": "…", "email": "…", "company": "…" }
}Verify the signature (Node)
import { createHmac, timingSafeEqual } from "crypto";
const timestamp = req.headers["x-heysale-timestamp"];
const signature = req.headers["x-heysale-signature"]; // "v1=<hex>"
const expected =
"v1=" + createHmac("sha256", YOUR_WEBHOOK_SECRET)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const ok =
signature.length === expected.length &&
timingSafeEqual(Buffer.from(signature), Buffer.from(expected));Deliveries are POSTed as JSON with x-heysale-event, x-heysale-timestamp and x-heysale-signature (v1= plus an HMAC-SHA256 of timestamp.body using your endpoint secret). Requests time out after 10 seconds. Failed deliveries are recorded and surfaced in the dashboard, and HeySale does not currently retry them automatically — treat your endpoint as needing to accept quickly, and re-fetch from the leads API if you miss an event.
What developers build with HeySale
Website implementation
Add a salesperson globally to a company website with one embed.
CRM integration
Push lead.captured and lead.updated events straight into a CRM.
Slack or Teams alerts
Notify the sales team the moment a qualified opportunity appears.
AI builders
Let a coding agent provision and install HeySale through MCP.
Internal workflows
Route conversation summaries from conversation.ended into an existing process.
Analytics
Combine exported leads and conversation data with internal reporting.
For website administrators
You do not need to write code, and you can ignore everything above about MCP and APIs. Adding HeySale means pasting one snippet into whichever place your site loads global scripts:
- A CMS theme header or footer template.
- Google Tag Manager, as a custom HTML tag firing on all pages.
- A website builder's “custom code” or “scripts” area.
- A short handoff to your developer: “please add this script sitewide, before the closing body tag”.
After that, load the site and confirm she appears. Your dashboard shows the installation as detected.
Security and data handling
- Everything is served over HTTPS.
- Account data is isolated at the row level, so one account cannot read another's.
- The embed only runs on domains you have authorized.
- API keys and webhook secrets are stored hashed or secret-side, and shown once.
- Team actions are recorded in an audit log.
- Payment details are handled by our payment provider; HeySale never stores card numbers.
If you implement HeySale on a site you operate, make sure your own privacy notices describe your use of conversational AI and any visitor information collected, as applicable law requires. This is information, not legal advice.
Developer support
Need help implementing HeySale? Email our team at hello@hey.sale. For security vulnerabilities, use the disclosure contact on the security page rather than a public GitHub issue.