Platform

  • Platform Overview
  • AI Capabilities
  • Automation Solutions
  • ROI Calculator
  • AI Analysis

Solutions

  • Operations
  • Finance
  • Marketing
  • Human Resources
  • Sales
  • Technology

Learn

  • Learning Center
  • Events
  • Video Center
  • Demos
  • Customer Stories
  • Webinars

Resources

  • Partners
  • Services
  • API Documentation
  • Integrations
  • For PuroClean Franchises
  • AI Universe

Company

  • About
  • AI Charter
  • CareersPOPULAR
  • Blog
  • Newsroom
  • Trust Center
  • Compliance
  • DPA
  • Privacy Policy
  • Terms of Service
  • Accessibility
© 2026 Expert AI Labs. All rights reserved.
Proudly US-Based
United States
California
New York
Tennessee
Georgia
AI

Stay Updated

Subscribe to our newsletter for the latest AI automation insights and industry trends.

← Back to interactive docsOr use Cmd/Ctrl + P → Destination: Save as PDF
EXPERT AI LABS

API Reference

Version 1.0 · Generated 2026-04-25
The orchestration layer between lead, call, job, and follow-up.

Overview

Base URL
https://expertailabs.ai/api/v1
Authentication
Bearer API key in the Authorization header. Keys are tenant-scoped with permissions read, write, or admin.
Format
JSON request and response bodies. UTF-8 encoded.
Rate limits
60 requests/minute default, with a burst allowance up to 120/min. Headers X-RateLimit-Remaining and Retry-After on 429 responses.
Pagination
Cursor-based on every list endpoint. Pass cursor from the previous response's next_cursor.
Errors
JSON envelope: {"error": {"code", "message", "details"}}. HTTP status follows REST conventions.
Webhooks
HMAC-SHA256 signed deliveries. Verify X-EAL-Signature against your signing secret before acting.
SDKs
Curl, Node.js (fetch), Python (requests). Official SDK packages on roadmap.

Authentication example

curl https://expertailabs.ai/api/v1/health \
  -H "Authorization: Bearer eal_live_a1b2c3d4..." \
  -H "Content-Type: application/json"

Organizations

Status: Live

Tenant entities. One organization per franchise location. Organizations can have a parent_organization_id for multi-franchise networks; parent-org reads require explicit grant from each child.

GET/api/v1/organizations/meREAD
Get the calling organization

Returns the organization tied to the API key making the request.

Response
{
  "id": "org_2k4n8q...",
  "name": "PuroClean North Metro Atlanta",
  "industry": "restoration",
  "parent_organization_id": null,
  "settings": { "timezone": "America/New_York" },
  "created_at": "2025-09-12T14:23:01.418Z"
}
GET/api/v1/organizationsADMIN
List child organizations (parent-org only)

Returns child organizations for parent-corp roll-up access. Requires admin-scope key on a parent organization.

POST/api/v1/organizationsADMIN
Create a child organization

Create a new tenant under the calling parent organization. Returns the new organization id and an initial admin invite link.

PATCH/api/v1/organizations/{id}ADMIN
Update organization settings

Update name, settings (timezone, retention overrides, integration toggles).

GET/api/v1/organizations/{id}/membersREAD
List organization members

Returns members with their roles.

POST/api/v1/organizations/{id}/grantsADMIN
Grant parent-corp read access

A child organization can grant read-only access to its parent organization for network roll-up reporting.

Leads & Prospects

Status: Live

Captured lead records and prospect targets. Lead-scoring metadata, source attribution, status transitions, and CRM sync state.

GET/api/v1/leadsREAD
List leads

Cursor-paginated. Filter by status, source, created_at range, or assigned user.

GET/api/v1/leads/{id}READ
Fetch a lead

Includes scoring metadata, source attribution, full event history, and CRM sync state.

POST/api/v1/leadsWRITE
Create a lead

Create a new lead. Triggers configured lead-capture automations (welcome email, scoring, CRM push).

Request body
{
  "first_name": "Jane",
  "last_name": "Doe",
  "email": "jane@example.com",
  "phone": "+15555550100",
  "source": "website",
  "campaign": "spring-2026-water",
  "metadata": { "form": "homepage-contact" }
}
PATCH/api/v1/leads/{id}WRITE
Update a lead

Update fields, change status, attach notes.

POST/api/v1/leads/{id}/scoreWRITE
Re-score a lead

Force a re-score using the latest signals. Otherwise scoring runs automatically.

POST/api/v1/leads/{id}/push-to-crmWRITE
Push a lead to the configured CRM

Manually trigger a CRM push if the automatic push failed or was skipped.

GET/api/v1/prospectsREAD
List prospect targets

Outbound prospect records (separate from inbound leads). Includes enrichment data, qualification status, and outreach state.

POST/api/v1/prospects/qualifyWRITE
Run qualification on a prospect

Triggers the AI qualification agent. Returns qualified/disqualified plus confidence and reasoning.

Content

Status: Live

AI-generated blog posts, video scripts, social posts, review responses. Includes draft, publish, revision, and distribution workflows.

GET/api/v1/contentREAD
List content items

Filter by type (blog/video/social/review), status (draft/scheduled/published), and channel.

GET/api/v1/content/{id}READ
Fetch content item

Returns the latest draft plus revision history and distribution state.

POST/api/v1/content/blogWRITE
Generate a blog post

Generate an SEO-optimized blog draft. Optionally specify keywords, target word count, and brand voice profile.

Request body
{
  "topic": "what to do after water damage",
  "keywords": ["water damage", "restoration", "atlanta"],
  "word_count": 1200,
  "voice_profile_id": "puroclean-nma-default"
}
POST/api/v1/content/video-scriptWRITE
Generate a video script

Returns a HeyGen-ready script in scenes. Optionally trigger HeyGen render directly.

POST/api/v1/content/review-responseWRITE
Generate a response to a customer review

Generates a brand-aligned response to a Google or third-party review. Supports negative/positive/neutral templates.

POST/api/v1/content/{id}/publishWRITE
Publish to configured destinations

Publish to the configured WordPress site, social channels, or review platform. Returns destination URLs.

POST/api/v1/content/{id}/scheduleWRITE
Schedule publication

Schedule for future publish. Returns scheduled job ID.

Outreach

Status: Live

Email and SMS sequences, drafts, sends, replies, suppressions, deliverability events. Multi-step nurture and outbound campaigns.

GET/api/v1/outreach/sequencesREAD
List sequences

Email or SMS sequences with stats (active recipients, completion rate, reply rate).

POST/api/v1/outreach/sequencesWRITE
Create a sequence

Define a multi-step sequence with branching logic.

POST/api/v1/outreach/enrollWRITE
Enroll a contact in a sequence

Enroll one or many contacts. Triggers immediately or at the next scheduled tick.

POST/api/v1/outreach/sendWRITE
Send a single ad-hoc message

One-off email or SMS. Subject and body required for email; body required for SMS.

GET/api/v1/outreach/messagesREAD
List messages

All sent messages. Filter by status (queued/sent/delivered/opened/clicked/replied/bounced).

GET/api/v1/outreach/repliesREAD
List inbound replies

Replies to outreach messages, with AI classification (positive/objection/unsubscribe/out-of-office/other).

GET/api/v1/outreach/suppressionsREAD
List suppression entries

Suppressions caused by unsubscribes, bounces, or manual additions. Suppressions block all outbound.

POST/api/v1/outreach/suppressionsWRITE
Add to suppression list

Manually add an email or phone to the suppression list.

DELETE/api/v1/outreach/suppressions/{id}ADMIN
Remove from suppression list

Use sparingly. Audit-logged.

Calls

Status: Ready (activates with feature)

Inbound call records ingested from CallRail and other call-tracking platforms. Each record includes recording URL, transcript, AI classification, and dispatch decision.

GET/api/v1/callsREAD
List calls

Cursor-paginated. Filter by status (received/transcribed/classified/dispatched), classification, qualified.

GET/api/v1/calls/{id}READ
Fetch a call

Returns the full call record: recording URL, transcript, AI classification (intent, urgency, qualified flag, confidence, summary), dispatch decision, callback events.

POST/api/v1/calls/{id}/reclassifyWRITE
Re-run classification

Force a fresh classification pass. Useful if the original transcript was low-quality or the prompt has been updated.

POST/api/v1/calls/{id}/dispatchWRITE
Manually dispatch a call

Override the automated dispatch decision. Sends configured SMS/email and pushes to CRM.

GET/api/v1/calls/statsREAD
Call statistics

Aggregated call counts by classification over a time range. Useful for ad-spend signal feedback.

Claims (Documentation Assist)

Status: Ready (activates with feature)

Insurance Documentation Assist generates structured inputs (scope items, photo summaries, room dimensions) for human entry into Xactimate or carrier portals. We do not write to Xactimate. We do not store sensitive claim data beyond the configured retention window (default 90 days).

GET/api/v1/claimsREAD
List documentation jobs

Each job represents a claim documentation extraction run.

POST/api/v1/claimsWRITE
Create a documentation job

Create a new documentation extraction job. Provide CompanyCam project ID or upload photos directly. Triggers the vision-extraction agent.

Request body
{
  "name": "1234 Maple Lane water damage",
  "source": "companycam",
  "companycam_project_id": "abc123",
  "loss_type": "water"
}
GET/api/v1/claims/{id}READ
Fetch a documentation job

Returns extracted scope items, photo summaries, room dimensions, with confidence scores per line.

POST/api/v1/claims/{id}/reviewWRITE
Approve, edit, or reject scope items

Human-in-the-loop reviewer marks each line item as approved/edited/rejected. Edits are tracked.

GET/api/v1/claims/{id}/export.pdfREAD
Download PDF report

Reviewer-friendly PDF for sharing with adjuster or customer.

GET/api/v1/claims/{id}/export.txtREAD
Download structured text

Plain-text format optimized for paste into Xactimate's manual entry interface.

Audit Log

Status: Live

Immutable record of every state-changing action in the platform. Includes actor, IP, timestamp, action, target resource, and a correlation ID. Retained 7 years.

GET/api/v1/audit-logREAD
List audit entries

Cursor-paginated with filters: actor_id, action, resource_type, start_at, end_at, correlation_id.

GET/api/v1/audit-log/export.csvREAD
Export to CSV

Stream the audit log as CSV. Same filters as the list endpoint.

GET/api/v1/audit-log/{id}READ
Fetch a single entry

Includes the full payload diff captured at the moment of the action.

Webhooks

Status: Live

Outbound event subscriptions with HMAC-SHA256 signature verification. Inbound webhook receivers for CallRail, Resend, Twilio, and Stripe.

GET/api/v1/webhooksREAD
List webhook subscriptions

Returns all webhook endpoints registered for this organization.

POST/api/v1/webhooksADMIN
Register a webhook endpoint

Subscribe to one or more event types. We return a signing secret used for HMAC verification.

Request body
{
  "url": "https://your-app.example.com/webhook",
  "events": ["call.qualified", "lead.created"],
  "description": "Production CRM bridge"
}
DELETE/api/v1/webhooks/{id}ADMIN
Delete a webhook

Stops sending events to this endpoint immediately.

POST/api/v1/webhooks/{id}/rotate-secretADMIN
Rotate the signing secret

Returns a new secret. The previous secret continues to work for 24 hours to allow zero-downtime rotation.

GET/api/v1/webhooks/{id}/deliveriesREAD
Recent deliveries

List the last 100 delivery attempts with status, response code, and latency.

Webhook events

EventDescription
call.receivedNew inbound call ingested from CallRail or other tracker
call.classifiedAI classification finished; includes intent, urgency, qualified flag
call.qualifiedA call was determined to be a qualified lead
lead.createdNew lead added to the system
outreach.email.sentOutbound email sent
outreach.email.repliedReply received and classified
claim.scope.readyInsurance documentation extraction completed
review.requestedCustomer was sent a review request after job completion
review.receivedNew review detected on Google or another listing
audit.log.eventStream of audit events for compliance integrations
Expert AI Labs · expertailabs.ai · developers@expertailabs.ai
Document generated 2026-04-25. For the latest reference, visit /docs/api