Relay

Developers

Embed your assistant on any website with a single snippet, or call the chat API from your own backend. Generate a publishable API key below to get started.

API keys

Publishable keys grant the ability to chat with your agents only; they can't read your inbox, contacts, or billing. Safe to embed in client-side code. Rotate freely.

Loading…

Outbound webhooks

Get an HTTPS POST to your server when things happen in your workspace. Each delivery is signed with your endpoint secret (X-BMRelay-Signature: sha256=HMAC(secret, timestamp.body)) and retried with backoff. Endpoints that keep failing are disabled automatically.

Loading…

Embed the chat widget

Paste this just before the closing </body> tag on any page of your website. A chat bubble appears in the bottom-right corner and talks to your agent in real time.

<script
  src="https://your-app.example.com/widget.js"
  data-api-key="YOUR_API_KEY"
  data-agent-id="YOUR_AGENT_ID"
  data-title="Chat with us"
  defer
></script>
  1. Create an API key above and copy it into data-api-key.
  2. The widget loads from your workspace, so it works on any domain.
  3. Conversations from the widget show up in your Inbox automatically.

Call the API directly

Prefer to build your own UI? POST to the chat endpoint. Reuse a stable session_id per visitor to keep conversation context across messages.

Endpoint
POST https://your-app.example.com/api/v1/public/agent/chat
Example request
curl -X POST https://your-app.example.com/api/v1/public/agent/chat \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -d '{
    "message": "What are your business hours?",
    "agent_id": "YOUR_AGENT_ID",
    "session_id": "visitor-123"
  }'
Example response
{
  "reply": "We're open Mon–Fri, 9am–6pm.",
  "status": "answered",
  "session_id": "visitor-123",
  "conversation_id": "cnv_…",
  "agent_name": "Support Agent",
  "citations": [{ "title": "Business hours", "score": 0.82 }]
}

Authenticate with the header X-Api-Key: wak_… (or Authorization: Bearer wak_…). Requests are rate-limited to 30/min per key. If the agent can't answer confidently the reply returns status: "low_confidence" and the conversation is handed to a human in your Inbox.