LeadTracker AI Developer
Version 1

Embed LeadTracker AI in your voice AI and automation stack.

Read live availability, create native bookings, synchronize CRM leads and inbound conversations, submit User Journey forms, and retain attribution, reminders, meeting links, and Telegram notifications in one system.

Base URL https://leadtrackerai.com/api/v1
i
Built for server-to-server integrations

Use the Developer API from Vapi, Retell, Bland, n8n, Zapier code steps, or your own backend. Do not expose API keys in browser code or a client-side voice widget.

Authentication

Create an API key from LeadTracker AI app → Developer API. Keys are workspace-scoped, shown once, and use explicit permissions.

Workspace isolation

A key never accepts a workspace ID from the request. Its workspace is resolved from the credential.

Least privilege

Choose narrowly scoped scheduling, leads, forms, analytics, conversation, or workflow permissions for each integration.

Operational control

Set an expiry, inspect last use, rotate safely, and revoke a compromised key immediately.

Authorization header
curl https://leadtrackerai.com/api/v1/scheduling/event-types \
  -H "Authorization: Bearer lt_live_..."
Alternative header
X-API-Key: lt_live_...
Write requests: send an Idempotency-Key header for every mutation. This prevents a platform retry from creating duplicate leads, form submissions, conversations, bookings, or workflow executions.
API keys are plan-limited: Starter allows 2, Team 5, Scale 15 (a free trial gets 1). Minting past the cap returns 402 quota_exceeded.

Event types

Fetch the booking types available in the authenticated workspace. Use an event type ID when retrieving availability or creating a booking.

GET/scheduling/event-typesscheduling:read

Returns active event types and their scheduling constraints.

Request
curl https://leadtrackerai.com/api/v1/scheduling/event-types \
  -H "Authorization: Bearer $LEADTRACKER_API_KEY"
200 response
{
  "data": [{
    "id": 42,
    "title": "Discovery Call",
    "duration_minutes": 30,
    "timezone": "America/New_York",
    "booking_window_days": 14
  }]
}

Availability

Slots are returned as UTC ISO 8601 timestamps. Convert them to the caller's local time in your voice experience, then pass the selected UTC start time when booking.

GET/scheduling/availabilityscheduling:read
Query parameterTypeDescription
event_type_id requiredintegerAn ID returned by the event types endpoint.
start_date requiredYYYY-MM-DDFirst calendar date to inspect.
end_date requiredYYYY-MM-DDLast calendar date to inspect. Ranges may be up to 31 days.
Request
curl "https://leadtrackerai.com/api/v1/scheduling/availability?event_type_id=42&start_date=2026-07-15&end_date=2026-07-21" \
  -H "Authorization: Bearer $LEADTRACKER_API_KEY"
200 response
{
  "data": {
    "event_type_id": 42,
    "timezone": "America/New_York",
    "slots": [{
      "start": "2026-07-15T14:00:00.000Z",
      "end": "2026-07-15T14:30:00.000Z"
    }]
  }
}

Create a booking

LeadTracker AI creates or updates the attendee's CRM lead, performs a final conflict check, creates the native meeting room, writes the connected calendar event, starts reminder delivery, and sends the normal Telegram booking notification.

POST/scheduling/bookingsscheduling:write
Body fieldTypeDescription
event_type_id requiredintegerThe active LeadTracker AI event type.
start requiredISO 8601 UTCThe exact slot start returned by availability.
attendee.name requiredstringProspect name.
attendee.email or attendee.phone requiredstringAt least one contact method. Phone is recommended for SMS reminders.
attendee.timezone requiredIANA timezoneFor example America/Chicago or Asia/Dubai.
sourcestringYour integration label, such as vapi or retell.
external_referencestringYour call, conversation, or booking identifier for reconciliation.
metadataobjectOptional integration context, stored with the booking. Maximum 16 KB.
Request
curl -X POST https://leadtrackerai.com/api/v1/scheduling/bookings \
  -H "Authorization: Bearer $LEADTRACKER_API_KEY" \
  -H "Idempotency-Key: vapi-call-6d9f08b2" \
  -H "Content-Type: application/json" \
  -d '{
    "event_type_id": 42,
    "start": "2026-07-15T14:00:00.000Z",
    "attendee": {
      "name": "Avery Chen",
      "email": "avery@northstar.example",
      "phone": "+15125550123",
      "timezone": "America/Chicago",
      "company": "Northstar Health",
      "location": "Austin, TX"
    },
    "source": "vapi",
    "external_reference": "call_01J123",
    "metadata": { "agent": "inbound-sales" }
  }'
201 Created
Response
{
  "data": {
    "id": "ltbk_9c7bd1...",
    "status": "scheduled",
    "start": "2026-07-15T14:00:00.000Z",
    "end": "2026-07-15T14:30:00.000Z",
    "meeting_url": "https://leadtrackerai.com/meet/...",
    "lead_id": 2194
  },
  "duplicate": false,
  "lead_created": true
}
Retries: replay the same request with the same Idempotency-Key. LeadTracker AI returns 200 and duplicate: true instead of creating a second appointment.

Read a booking

GET/scheduling/bookings/{booking_id}scheduling:read

Use the LeadTracker AI booking ID returned when an appointment is created. The record is only accessible within the API key's workspace.

Request
curl https://leadtrackerai.com/api/v1/scheduling/bookings/ltbk_9c7bd1... \
  -H "Authorization: Bearer $LEADTRACKER_API_KEY"

Reschedule a booking

POST/scheduling/bookings/{booking_id}/reschedulescheduling:write

LeadTracker AI validates the requested slot again, updates the connected calendar event and native meeting, and re-evaluates reminder delivery.

Request body
{
  "start": "2026-07-16T16:00:00.000Z",
  "reason": "Caller requested a later time"
}

Cancel a booking

POST/scheduling/bookings/{booking_id}/cancelscheduling:write

Cancelling removes the provider event when connected, stops pending reminders, clears the active appointment from the CRM lead, and retains the booking history.

Request body
{
  "reason": "Prospect cancelled during the call"
}

Leads

Use the CRM endpoints to identify a caller, create or update a contact, and add durable notes or activities. They expose a deliberately small CRM-safe field set: no deletion, assignment, campaign enrollment, billing, or bulk export operations are available.

GET/leadsList up to 50 recent leads
GET/leads/search?q=... | email=... | phone=...Find a specific lead
GET/leads/{lead_id}Read one lead
POST/leads | /leads/upsertCreate or match a lead
PATCH/leads/{lead_id}Update CRM-safe fields
POST/leads/{lead_id}/notes | /activitiesAdd CRM history
POST/leads/upsertleads:write

Provide an email or phone to match an existing record. Every lead mutation requires Idempotency-Key.

Request
curl -X POST https://leadtrackerai.com/api/v1/leads/upsert \
  -H "Authorization: Bearer $LEADTRACKER_API_KEY" \
  -H "Idempotency-Key: voice-call-01JABC" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Avery Chen",
    "email": "avery@northstar.example",
    "phone": "+15125550123",
    "company": "Northstar Health",
    "timezone": "America/Chicago",
    "source": "retell",
    "attribution": { "utm_source": "partner" }
  }'

Inbound conversations

Ingest caller messages, transcripts, summaries, and dispositions into the existing lead timeline. These routes accept inbound data only; they never invoke an email, SMS, WhatsApp, or calling provider.

POST/conversations/inboundStore an inbound channel message
POST/conversations/inbound-callsStore an inbound call transcript or outcome
POST/conversations/inbound-callsconversations:write

Supply lead_id, lead_email, or lead_phone, plus an external call ID and at least one of transcript, summary, disposition, or outcome. STOP requests are routed through LeadTracker AI's normal suppression handling.

Required idempotency: use a stable key from the upstream call provider. The API records a workspace-scoped external call ID and does not send a reply.

User Journey forms

Render the saved LeadTracker AI User Journey definition on a trusted server, then preserve the exact qualification, attribution, event stream, and lead notification behavior when a prospect submits it.

{brand} is your workspace's own brand slug — one per public booking/application page you've set up (find yours on the Applications dashboard's User Journey Forms page, or in each page's live URL). Any brand slug your workspace owns works here; it isn't limited to any fixed list.

GET/forms/{brand}Fetch the saved form definition
POST/forms/{brand}/eventsAppend a funnel event
POST/forms/{brand}/submissionsValidate and submit a completed form
POST/forms/acme/submissionsforms:submit

The submission is checked against the saved form definition. Send contact data, answers, IANA timezone, optional location, attribution, and a stable session ID. New leads follow the existing Telegram notification route; retries replay safely.

Server-side only: do not expose an lt_live_ key in a browser embed. Use LeadTracker AI's public hosted journey for client-side pages.

Funnel analytics

Read aggregate application, qualification, booking, attribution, and abandonment metrics without exposing contact details, answers, session identifiers, or raw query strings.

GET/analytics/application-funnel?days=30&brand=acmeanalytics:read

days accepts 7 through 90. brand is optional and, when given, must be one of your workspace's own registered brand slugs (omit it to aggregate across all of them). The response contains totals, daily trend data, attribution rows, and abandonment points only.

Workflow triggers

Trigger a preconfigured webhook workflow from an external system. The API cannot create, edit, activate, or inspect workflow definitions; it can only invoke an active webhook.received workflow in the key's workspace.

POST/workflows/{workflow_id}/triggerworkflows:trigger

Send { "event": "voice.call.completed", "payload": { ... } } with an Idempotency-Key. If the workflow defines trigger_config.api_event, the event must match.

Billing is enforced server-side: this endpoint runs the same paid-plan gate as LeadTracker AI automation. It returns 402 subscription_required for a trial workspace and fails closed if subscription verification is unavailable. Any message or call action still performs its normal usage and compliance checks.

Booking webhooks

Create endpoints from LeadTracker AI app → Developer API. Endpoint configuration is owner/admin session-only; API keys cannot add a destination or reveal a signing secret.

EVENTbooking.createdNative booking was confirmed
EVENTbooking.rescheduledNative booking time changed
EVENTbooking.cancelledNative booking was cancelled
EVENTbooking.no_showAttendance was marked no-show
POSTYour configured HTTPS endpointHMAC SHA-256

LeadTracker AI sends JSON over DNS-pinned public HTTPS, never follows redirects, and retries at least once with a stable event ID. De-duplicate deliveries with X-LeadTracker-Event-Id.

HeaderDescription
X-LeadTracker-EventThe booking event name.
X-LeadTracker-Event-IdStable event identifier for receiver de-duplication.
X-LeadTracker-TimestampUnix timestamp in seconds.
X-LeadTracker-Signaturev1= + HMAC SHA-256 of timestamp + "." + raw_body.

Errors and limits

All errors include a stable machine-readable code and an request_id for support and diagnostics.

400invalid_attendeeRequired contact information or timezone is missing or invalid.
401invalid_api_keyThe key is unknown, expired, revoked, or belongs to an inactive workspace.
402subscription_requiredA paid automation action was requested from a workspace without an active subscription, or its trial has ended.
402quota_exceededA plan count limit (seats, phone numbers, active forms, form submissions/mo, API keys) is at its cap. Upgrade to raise it.
402trial_limit_reachedA free-trial cap (seats, event types, video minutes, AI summaries, forms, submissions, API keys) is at its limit. Pick a plan to raise it.
402trial_expiredThe workspace's 14-day trial window has passed; mutations are blocked (reads still work) until a plan is chosen.
403insufficient_scopeThe credential does not include the required capability scope.
404booking_not_foundThe booking does not exist in this workspace.
409slot_takenThe slot changed after availability was fetched. Fetch availability again and offer a new time.
409idempotency_key_reusedThe same write key was sent with a different request body.
429rate_limitedAuthenticated keys are limited to 120 requests per minute. Respect the standard rate-limit response headers.
503subscription_verification_unavailablePaid external actions fail closed while entitlement verification is unavailable.
Error response
{
  "error": {
    "code": "slot_taken",
    "message": "That slot is no longer available."
  },
  "request_id": "4c0725d0-..."
}

Security practices

Use separate keys for every provider and environment. Give each key a recognizable name, set a practical expiration, and replace it before sharing changes hands.

!
Keep keys server-side

Never put a LeadTracker AI API key in a frontend bundle, publicly accessible webhook URL, or transcript. For a suspected exposure, create a replacement key and revoke the existing one immediately.

Payment and compliance gates cannot be delegated: an API key grants only a capability scope. It never grants a plan, usage allowance, phone number, billing role, or exemption from consent, quiet-hours, opt-out, and provider checks.