Developer Documentation

HoverBot API Reference

Authentication, endpoints, webhooks, and operational limits for production integrations.

Authentication

  • Use API keys for server-to-server requests with workspace-scoped permissions.
  • Use OAuth 2.0 for multi-tenant marketplace integrations.
  • All API requests require TLS and `Authorization: Bearer <token>`.

Core endpoints

EndpointMethodPurpose
/v1/conversationsPOSTCreate a conversation session with channel and user metadata.
/v1/conversations/{id}/messagesPOSTSend a user message and return assistant response + trace metadata.
/v1/conversations/{id}GETFetch transcript, outcomes, and escalation state.
/v1/knowledge-sourcesPOSTCreate or update indexed knowledge sources used by retrieval.
/v1/escalationsPOSTPush manual handoff events into CRM/helpdesk workflows.

Webhook events

EventWhen firedKey fields
conversation.createdSession initializedconversationId, tenantId, channel, startedAt
message.respondedAssistant response emittedlatencyMs, modelTier, confidence, policyFlags
lead.qualifiedQualification threshold reachedleadScore, intent, contactFields, transcriptUrl
escalation.createdHuman handoff createdreasonCode, destination, owner, priority

Rate limits and SLA

  • Default API limit: 600 requests per minute per workspace key.
  • Burst handling: up to 2x sustained limit for short windows with retry guidance.
  • Webhook retries: exponential backoff for up to 24 hours with idempotency keys.
  • Availability objective: 99.9% monthly target on production plans.

Code examples

cURL

curl -X POST "https://api.hoverbot.ai/v1/conversations/{id}/messages" \
  -H "Authorization: Bearer $HOVERBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Can I change my shipping address?",
    "channel": "web",
    "locale": "en-US"
  }'

Node.js

const response = await fetch("https://api.hoverbot.ai/v1/conversations", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.HOVERBOT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    externalUserId: "user-123",
    channel: "web",
    metadata: { source: "landing-page-demo" },
  }),
});

const payload = await response.json();

Python

import requests

resp = requests.post(
    "https://api.hoverbot.ai/v1/knowledge-sources",
    headers={"Authorization": f"Bearer {api_key}"},
    json={
        "name": "Help Center",
        "type": "url-crawl",
        "seedUrls": ["https://docs.example.com/help"]
    },
    timeout=20,
)

print(resp.status_code, resp.json())