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/mcp

This 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 Registry

Quick start

  1. 1. Create your salesperson

    Enter the website address in HeySale. She reads the site and learns what it sells.

  2. 2. Configure her

    Set her name, greeting, objective, appearance, language and allowed domains.

  3. 3. Install HeySale

    Copy the embed snippet from your dashboard and place it globally on the site.

  4. 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/mcp

Transport: 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

  1. 1User intent
  2. 2AI invokes create_website_salesperson — the response carries a persistent salesperson_id and a claim link
  3. 3HeySale learns the website
  4. 4AI checks salesperson status
  5. 5AI retrieves the installation script
  6. 6AI adds HeySale to the website
  7. 7AI verifies the installation from HeySale telemetry
  8. 8AI hands the claim link to the website owner
  9. 9The website starts having sales conversations

Full server reference: /developers/mcp.

Use HeySale with AI builders and assistants

PlatformStatusGuide
LovableAvailable/lovable
ChatGPTCustom MCP/chatgpt
ClaudeAvailable/claude
CursorOne-click install/cursor
ReplitCustom MCP/replit
GitHub CopilotCustom MCP/github-copilot
Any MCP clientAvailable/integrations/mcp
v0Coming soon/v0
BoltCustom MCP/bolt
Google AntigravityCustom MCP/antigravity
KiroCustom MCP/kiro
DevinCustom MCP/devin
WindsurfCustom MCP/windsurf
ManusCustom MCP/manus
PerplexityComing soon/perplexity
View all integrations

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
View HeySale on GitHub

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.

MethodEndpointAuthPurpose
POST/api/public/v1/integrations/salespeopleNoneCreate 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}NoneBuild status for a salesperson.
PATCH/api/public/v1/integrations/salespeople/{id}API keyUpdate name, greeting or objective.
GET/api/public/v1/integrations/salespeople/{id}/installationNoneThe embed script, its placement, and whether it has been detected on the site.
GET/api/public/v1/integrations/salespeople/{id}/resultsAPI keyConversation, lead and usage summary. Optional days=1..90.
GET/api/public/v1/leadsAPI keyPaged lead export. Optional limit (1-100), since (ISO date), status, include_transcript.
GET/api/public/v1/leads/{id}API keyA single lead, optionally with its transcript.
GET/api/public/integrations.jsonNoneMachine-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

CodeHTTPMeaning
invalid_url400The website address was missing, private or not a public https site.
not_ready409The salesperson is still reading the website. Check status again shortly.
forbidden401Missing or wrong API key for this salesperson.
not_found404No salesperson exists with that id.
rate_limited429Too many create requests from the same origin.
disabled503External provisioning is temporarily turned off.
internal_error500Unexpected 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.