https://expertailabs.ai/api/v1Authorization header. Keys are tenant-scoped with permissions read, write, or admin.X-RateLimit-Remaining and Retry-After on 429 responses.cursor from the previous response's next_cursor.{"error": {"code", "message", "details"}}. HTTP status follows REST conventions.X-EAL-Signature against your signing secret before acting.curl https://expertailabs.ai/api/v1/health \
-H "Authorization: Bearer eal_live_a1b2c3d4..." \
-H "Content-Type: application/json"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.
/api/v1/organizations/meREADReturns the organization tied to the API key making the request.
{
"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"
}/api/v1/organizationsADMINReturns child organizations for parent-corp roll-up access. Requires admin-scope key on a parent organization.
/api/v1/organizationsADMINCreate a new tenant under the calling parent organization. Returns the new organization id and an initial admin invite link.
/api/v1/organizations/{id}ADMINUpdate name, settings (timezone, retention overrides, integration toggles).
/api/v1/organizations/{id}/membersREADReturns members with their roles.
/api/v1/organizations/{id}/grantsADMINA child organization can grant read-only access to its parent organization for network roll-up reporting.
Captured lead records and prospect targets. Lead-scoring metadata, source attribution, status transitions, and CRM sync state.
/api/v1/leadsREADCursor-paginated. Filter by status, source, created_at range, or assigned user.
/api/v1/leads/{id}READIncludes scoring metadata, source attribution, full event history, and CRM sync state.
/api/v1/leadsWRITECreate a new lead. Triggers configured lead-capture automations (welcome email, scoring, CRM push).
{
"first_name": "Jane",
"last_name": "Doe",
"email": "jane@example.com",
"phone": "+15555550100",
"source": "website",
"campaign": "spring-2026-water",
"metadata": { "form": "homepage-contact" }
}/api/v1/leads/{id}WRITEUpdate fields, change status, attach notes.
/api/v1/leads/{id}/scoreWRITEForce a re-score using the latest signals. Otherwise scoring runs automatically.
/api/v1/leads/{id}/push-to-crmWRITEManually trigger a CRM push if the automatic push failed or was skipped.
/api/v1/prospectsREADOutbound prospect records (separate from inbound leads). Includes enrichment data, qualification status, and outreach state.
/api/v1/prospects/qualifyWRITETriggers the AI qualification agent. Returns qualified/disqualified plus confidence and reasoning.
AI-generated blog posts, video scripts, social posts, review responses. Includes draft, publish, revision, and distribution workflows.
/api/v1/contentREADFilter by type (blog/video/social/review), status (draft/scheduled/published), and channel.
/api/v1/content/{id}READReturns the latest draft plus revision history and distribution state.
/api/v1/content/blogWRITEGenerate an SEO-optimized blog draft. Optionally specify keywords, target word count, and brand voice profile.
{
"topic": "what to do after water damage",
"keywords": ["water damage", "restoration", "atlanta"],
"word_count": 1200,
"voice_profile_id": "puroclean-nma-default"
}/api/v1/content/video-scriptWRITEReturns a HeyGen-ready script in scenes. Optionally trigger HeyGen render directly.
/api/v1/content/review-responseWRITEGenerates a brand-aligned response to a Google or third-party review. Supports negative/positive/neutral templates.
/api/v1/content/{id}/publishWRITEPublish to the configured WordPress site, social channels, or review platform. Returns destination URLs.
/api/v1/content/{id}/scheduleWRITESchedule for future publish. Returns scheduled job ID.
Email and SMS sequences, drafts, sends, replies, suppressions, deliverability events. Multi-step nurture and outbound campaigns.
/api/v1/outreach/sequencesREADEmail or SMS sequences with stats (active recipients, completion rate, reply rate).
/api/v1/outreach/sequencesWRITEDefine a multi-step sequence with branching logic.
/api/v1/outreach/enrollWRITEEnroll one or many contacts. Triggers immediately or at the next scheduled tick.
/api/v1/outreach/sendWRITEOne-off email or SMS. Subject and body required for email; body required for SMS.
/api/v1/outreach/messagesREADAll sent messages. Filter by status (queued/sent/delivered/opened/clicked/replied/bounced).
/api/v1/outreach/repliesREADReplies to outreach messages, with AI classification (positive/objection/unsubscribe/out-of-office/other).
/api/v1/outreach/suppressionsREADSuppressions caused by unsubscribes, bounces, or manual additions. Suppressions block all outbound.
/api/v1/outreach/suppressionsWRITEManually add an email or phone to the suppression list.
/api/v1/outreach/suppressions/{id}ADMINUse sparingly. Audit-logged.
Inbound call records ingested from CallRail and other call-tracking platforms. Each record includes recording URL, transcript, AI classification, and dispatch decision.
/api/v1/callsREADCursor-paginated. Filter by status (received/transcribed/classified/dispatched), classification, qualified.
/api/v1/calls/{id}READReturns the full call record: recording URL, transcript, AI classification (intent, urgency, qualified flag, confidence, summary), dispatch decision, callback events.
/api/v1/calls/{id}/reclassifyWRITEForce a fresh classification pass. Useful if the original transcript was low-quality or the prompt has been updated.
/api/v1/calls/{id}/dispatchWRITEOverride the automated dispatch decision. Sends configured SMS/email and pushes to CRM.
/api/v1/calls/statsREADAggregated call counts by classification over a time range. Useful for ad-spend signal feedback.
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).
/api/v1/claimsREADEach job represents a claim documentation extraction run.
/api/v1/claimsWRITECreate a new documentation extraction job. Provide CompanyCam project ID or upload photos directly. Triggers the vision-extraction agent.
{
"name": "1234 Maple Lane water damage",
"source": "companycam",
"companycam_project_id": "abc123",
"loss_type": "water"
}/api/v1/claims/{id}READReturns extracted scope items, photo summaries, room dimensions, with confidence scores per line.
/api/v1/claims/{id}/reviewWRITEHuman-in-the-loop reviewer marks each line item as approved/edited/rejected. Edits are tracked.
/api/v1/claims/{id}/export.pdfREADReviewer-friendly PDF for sharing with adjuster or customer.
/api/v1/claims/{id}/export.txtREADPlain-text format optimized for paste into Xactimate's manual entry interface.
Immutable record of every state-changing action in the platform. Includes actor, IP, timestamp, action, target resource, and a correlation ID. Retained 7 years.
/api/v1/audit-logREADCursor-paginated with filters: actor_id, action, resource_type, start_at, end_at, correlation_id.
/api/v1/audit-log/export.csvREADStream the audit log as CSV. Same filters as the list endpoint.
/api/v1/audit-log/{id}READIncludes the full payload diff captured at the moment of the action.
Outbound event subscriptions with HMAC-SHA256 signature verification. Inbound webhook receivers for CallRail, Resend, Twilio, and Stripe.
/api/v1/webhooksREADReturns all webhook endpoints registered for this organization.
/api/v1/webhooksADMINSubscribe to one or more event types. We return a signing secret used for HMAC verification.
{
"url": "https://your-app.example.com/webhook",
"events": ["call.qualified", "lead.created"],
"description": "Production CRM bridge"
}/api/v1/webhooks/{id}ADMINStops sending events to this endpoint immediately.
/api/v1/webhooks/{id}/rotate-secretADMINReturns a new secret. The previous secret continues to work for 24 hours to allow zero-downtime rotation.
/api/v1/webhooks/{id}/deliveriesREADList the last 100 delivery attempts with status, response code, and latency.
| Event | Description |
|---|---|
call.received | New inbound call ingested from CallRail or other tracker |
call.classified | AI classification finished; includes intent, urgency, qualified flag |
call.qualified | A call was determined to be a qualified lead |
lead.created | New lead added to the system |
outreach.email.sent | Outbound email sent |
outreach.email.replied | Reply received and classified |
claim.scope.ready | Insurance documentation extraction completed |
review.requested | Customer was sent a review request after job completion |
review.received | New review detected on Google or another listing |
audit.log.event | Stream of audit events for compliance integrations |