Developers · REST API
Build with Reapdat
Voice calls, chat, bookings, and leads — one REST API. Authenticate with a key and send your first request in minutes.
Quick Start
Get Your API Key
Sign up and generate an API key from the portal dashboard.
# 1. Sign up at your-domain.com/signup
# 2. Complete onboarding
# 3. Go to Portal > Integrate > API Keys
# 4. Click "Generate API Key"
# Your key will look like: ua_aBcDeFgHiJkLmNoPqRsTuVwXyZ...Install the Widget
Add the chat widget to your website with a single script tag.
<!-- Add before </body> on your website -->
<script
src="https://your-domain.com/widget.js"
data-tenant-id="your_tenant_id"
data-theme="dark"
data-position="bottom-right"
async
></script>Make Your First API Call
Send a chat message or initiate a voice call via the REST API.
curl -X POST https://your-domain.com/api/v1/chat/message \
-H "Content-Type: application/json" \
-H "X-API-Key: ua_your_api_key" \
-d '{
"message": "Hello, I want to book an appointment",
"tenant_id": "your_tenant_id",
"client_name": "Jane Smith"
}'Authentication
The API supports two authentication methods. Use API keys for server-to-server integrations and JWT cookies for browser-based sessions.
# API Key Authentication
# Pass your key in the X-API-Key header
curl https://your-domain.com/api/v1/leads \
-H "X-API-Key: ua_your_api_key"
# Key prefixes:
# ua_ — Standard keys (read/write calls, leads, bookings)
# ua_admin_ — Admin keys (tenant management, full access)- Never expose API keys in client-side code
- JWT tokens are stored in HttpOnly cookies (not accessible via JavaScript)
- All requests must use HTTPS in production
- Admin keys (
ua_admin_) should only be used in secure backend environments
API Reference
Base URL: https://your-domain.com All endpoints require authentication unless noted otherwise.
SDK Examples
Copy-paste examples for common operations in your language of choice.
import requests
API_KEY = "ua_your_api_key"
BASE_URL = "https://your-domain.com/api/v1"
headers = {
"Content-Type": "application/json",
"X-API-Key": API_KEY,
}
# Send a chat message
response = requests.post(f"{BASE_URL}/chat/message", headers=headers, json={
"message": "I'd like to book an appointment for tomorrow",
"tenant_id": "your_tenant_id",
"client_name": "Jane Smith",
})
print(response.json())
# Initiate an AI voice call
call = requests.post(f"{BASE_URL}/calls/initiate", headers=headers, json={
"phone_number": "+15551234567",
"client_name": "John Doe",
"call_type": "outbound",
"custom_prompt": "Greet the caller and schedule an appointment.",
})
print(call.json())
# Get all leads
leads = requests.get(f"{BASE_URL}/leads", headers=headers)
print(leads.json())Webhooks
Configure webhook URLs in your portal settings to receive real-time event notifications. All payloads are signed with HMAC-SHA256 for verification.
call.completedVoice call finished (includes transcript, duration, sentiment)call.startedVoice call initiated and connectedcall.failedVoice call failed to connect or erroredbooking.createdNew booking made (via widget, API, or AI)booking.updatedBooking was rescheduled or modifiedbooking.cancelledBooking was cancelledlead.capturedNew lead captured from conversation or formlead.updatedLead status or details changedchat.messageNew chat message received from a visitorchat.session_endedChat session closedcrm.sync_completedCRM sync finished successfullycrm.sync_failedCRM sync encountered an error{
"event": "call.completed",
"timestamp": "2026-02-27T14:30:00Z",
"tenant_id": "tenant_abc123",
"data": {
"call_id": "call_xyz789",
"phone_number": "+15551234567",
"client_name": "John Doe",
"duration": 142,
"direction": "outbound",
"sentiment": "positive",
"transcript": [
{ "role": "agent", "text": "Hello, this is AI assistant..." },
{ "role": "user", "text": "Hi, I'd like to schedule..." }
],
"lead": {
"name": "John Doe",
"phone": "+15551234567",
"email": "john@example.com",
"intent": "booking"
},
"actions": ["booking_created"]
}
}import hmac
import hashlib
def verify_webhook(payload: bytes, signature: str, secret: str) -> bool:
"""Verify HMAC-SHA256 webhook signature."""
expected = hmac.new(
secret.encode("utf-8"),
payload,
hashlib.sha256
).hexdigest()
return hmac.compare_digest(f"sha256={expected}", signature)
# In your webhook handler:
# signature = request.headers.get("X-Webhook-Signature")
# is_valid = verify_webhook(request.body, signature, WEBHOOK_SECRET)Rate Limits
Rate limits protect the platform and ensure fair usage. When a limit is exceeded, the API returns 429 Too Many Requests with a Retry-After header.
| Category | Limit |
|---|---|
| Authentication | 5 req / 15 min |
| Chat Messages | 200 req / hour |
| Voice Calls | 60 req / min |
| Knowledge Ingest | 100 req / hour |
| Analytics | 120 req / min |
| Widget Endpoints | 300 req / min |
| General API | 1000 req / min |
Error Codes
All error responses include a JSON body with a detail field describing the error. Production errors never expose stack traces.
| Code | Status | Description |
|---|---|---|
| 200 | OK | Request succeeded |
| 201 | Created | Resource created successfully |
| 400 | Bad Request | Invalid request body or parameters |
| 401 | Unauthorized | Missing or invalid API key / JWT token |
| 403 | Forbidden | Insufficient permissions (e.g., non-admin accessing admin endpoint) |
| 404 | Not Found | Resource not found or does not belong to your tenant |
| 409 | Conflict | Resource already exists (e.g., duplicate email registration) |
| 422 | Validation Error | Request body failed validation (Pydantic) |
| 429 | Too Many Requests | Rate limit exceeded. Check Retry-After header |
| 500 | Internal Error | Server error. No stack traces in production |
{
"detail": "Invalid API key or insufficient permissions"
}
// Validation errors (422) include field-level details:
{
"detail": [
{
"loc": ["body", "email"],
"msg": "value is not a valid email address",
"type": "value_error.email"
}
]
}Widget Integration
Add the Reapdat chat widget to any website with a single script tag. The widget provides live chat, voice calls, and booking functionality. Your website domain must be registered in your tenant's allowed_domains list for origin validation.
<!-- Reapdat Widget -->
<!-- Add this snippet before the closing </body> tag -->
<script
src="https://your-domain.com/widget.js"
data-tenant-id="your_tenant_id"
data-theme="dark"
data-position="bottom-right"
data-accent-color="#FF3621"
data-greeting="Hi! How can I help you today?"
async
></script>
<!--
Configuration attributes:
data-tenant-id (required) Your unique tenant identifier
data-theme "dark" | "light" (default: "dark")
data-position "bottom-right" | "bottom-left" (default: "bottom-right")
data-accent-color Hex color for widget accent (default: "#FF3621")
data-greeting Custom greeting message
-->- AI-powered chat with RAG context from your knowledge base
- In-browser voice calls via WebRTC
- Phone call initiation (connects to Twilio)
- Appointment booking with calendar availability
- Lead capture and CRM sync
- Fully responsive and mobile-friendly
Ready to integrate?
Try the API playground or sign up to get your key.
FAQ
Questions, answered
API, widget, and integration questions lead here — everything else businesses ask follows.
Talk to usDevelopers
06 questionsYes — a REST API covering chat, calls, leads, and bookings. Generate an API key from Portal → Integrate, then authenticate with the X-API-Key header. The full reference and examples live on the developers page.
One script tag before the closing body tag, with your tenant ID and optional theme and position attributes. The script loads async, so it never blocks your page render.
No. The widget script loads asynchronously after your page renders and stays out of the critical path — your content paints first, the widget appears when it's ready.
Yes. Custom webhooks can notify your systems about new leads, bookings, and conversations, and the Zapier integration connects Reapdat to thousands of other tools alongside the native CRM syncs.
Widget requests are validated against your allowed domains, so only sites you've whitelisted can open sessions with your agent. Built-in rate limiting and spam protection cover the rest.
Yes — the interactive playground on the developers page lets you send real requests and inspect responses right in the browser before you integrate.
General
06 questionsReapdat is an AI front desk assistant platform. It answers phone calls, chats with website visitors, replies to emails, and books appointments — all automatically, 24/7. Think of it as a tireless front-desk employee that handles every channel and never misses a customer.
No. Every account gets a hosted chat page with a unique link and a QR code. Share it on WhatsApp, Instagram, Google Business Profile, business cards, or text messages — your customers chat with your AI from anywhere, no website required.
Under 10 minutes. Sign up, paste your website URL or upload your FAQs for the AI to learn from, set your agent's personality, and you're live. No coding, no developer needed.
Yes. The chat widget, browser voice calls, booking, and email auto-replies all run from one account and share one knowledge base — so a customer who emails at 2 AM and chats the next morning gets consistent answers on both channels.
Every conversation is logged with a full transcript. Correct the answer once in your knowledge base and every channel learns instantly. The AI also detects frustrated or urgent customers and escalates them straight to your team.
Yes. All data is encrypted in transit (TLS 1.3) and at rest, with strict per-business data isolation. We're GDPR-ready and VAPT security-tested. We never sell or share your data, and you can delete your records at any time.
Product
07 questionsWebsite chat, browser voice calls, phone, email, and anywhere you can paste your hosted chat link — WhatsApp, Instagram bio, Google Business, SMS, QR codes, email signatures. One AI brain answers on all of them.
Paste your website URL or upload FAQs and documents — the AI builds its knowledge base from them in minutes. When you correct or add an answer, chat, voice, and email all update at once.
Visitors click the widget and talk to your AI through their microphone, right in the browser — no phone number to dial, no app to install. The AI answers questions, captures the lead, and can book an appointment mid-call, with a full transcript saved.
Yes. The AI checks your Google Calendar availability, books the slot, and sends confirmations and reminders. Customers can reschedule or cancel on their own, directly inside the chat.
It doesn't guess. Uncertain emails and conversations land in your Needs You queue with an AI-drafted reply ready for review — you approve, edit, or answer yourself, and the AI learns from the correction.
Forward your support inbox to Reapdat and the AI reads every incoming email and replies in about 30 seconds, using the same knowledge base and tone as your chat and voice agent.
Yes — set the greeting, tone of voice, speaking voice, and handling rules, like training a new hire. On the Growth plan and up you can also white-label the widget so it's fully your brand.
Pricing
06 questionsStarter is $59/mo (100 bookings, 1,500 chats, 300 voice minutes, 300 AI-handled emails). Growth is $129/mo (400 bookings, 3,500 chats, 700 voice minutes, 1,000 emails). Scale is $349/mo (1,000 bookings, 14,000 chats, 1,800 voice minutes, 3,000 emails). Every paid plan includes chat, voice, booking, and email.
14 days with 10 bookings, 200 chats, 30 voice minutes, 30 AI-handled emails, and 3 knowledge documents — no credit card required. Add a payment method on day 8 to unlock the full feature set, including unlimited voice testing.
Your account pauses — no charge, no data deleted. Pick a paid plan whenever you're ready and your AI picks up exactly where it left off.
Each plan includes a monthly allowance of bookings, chat conversations, voice minutes, and AI-handled emails. Your dashboard shows live usage, so you always know where you stand before you hit a limit.
Yes — upgrade or downgrade any time from the billing page in your dashboard, and the change applies to your next billing cycle.
Yes. Annual plans save up to 20% compared to paying monthly — the annual price is shown next to each plan on the pricing page.
Industries
06 questionsReal Estate, Healthcare, Legal, Restaurants, Auto Dealerships, Insurance, Salons & Spas, Fitness, Education, Financial Services, Home Services, and Travel — each with tailored starting templates so the AI speaks your industry's language from day one.
Almost certainly. Reapdat learns any business from its website, FAQs, and documents. If your customers call, chat, or email you, the AI can answer them — the industry templates are a head start, not a requirement.
Yes. The AI answers from your knowledge base — your services, prices, hours, policies, and FAQs. It only says what you've taught it, and escalates to your team when a question falls outside that.
The big three: answering after-hours calls and chats that used to go to voicemail, booking appointments directly into the calendar, and capturing every lead into the CRM. Each industry page on this site shows worked examples.
All conversations are encrypted in transit and at rest, with strict per-business data isolation, and the AI escalates sensitive or uncertain requests to your team instead of guessing. If your industry has specific compliance requirements, talk to us and we'll walk through how Reapdat fits them.
Yes — the live demo page has ready-made agents for several industries, so you can chat or talk to one that already sounds like your business before you sign up.
Contact & Support
05 questionsUse the form on the contact page, or reach us directly by email or phone — both are listed there. For quick product questions, the chat widget on this site answers instantly, any hour.
Our team is available Monday to Friday, 9 AM – 6 PM EST. The AI assistant on this site — the same product we sell — covers questions 24/7.
Yes. The demo page lets you chat and talk with live industry agents right now, and there's a recorded walkthrough on the demo video page if you'd rather watch first.
Setup is self-serve and takes about 10 minutes, with guides at every step. Scale plan customers get a dedicated account manager; on any plan, contact us and we'll help you get live.
We're based in Brampton, Ontario, Canada, and serve businesses worldwide. Your AI agent works in whatever timezone your customers are in.