Leads in. Outcomes out.
Lojiq's agents, from your software.

The Lojiq Public API is the programmable side of Lojiq: push leads from anywhere, get every call, text and appointment outcome back as a signed webhook, and run Lojiq's AI voice agents from your own product with one API key.

Two APIs, two hosts#

Lojiq has two HTTP APIs. Only one of them is for you.

Public API
https://api.lojiq.ai/v1For your software, your CRM, Zapier. API-key auth. Versioned, documented here, supported.
Private API
https://app.lojiq.ai/api/v1For the Lojiq web and mobile apps only. Session auth. Undocumented, changes without notice, and not served on api.lojiq.ai (it answers 404 not_found there).

If you ever find yourself calling app.lojiq.ai/api/v1, stop: that surface can change under you at any time. Everything on this site lives under https://api.lojiq.ai/v1/.

What you can build#

How it fits together#

  1. Get a key#

    An organization Owner or Admin creates a key in the Lojiq app (Developer → API keys), picks its scopes, and copies it once. Authentication & keys →

  2. Push leads#

    POST /leads from your web form, CRM or any backend. The same phone number never creates a duplicate. Leads guide →

  3. Let Lojiq work#

    Campaigns dial, texting journeys follow up, the receptionist answers, appointments get booked — all configured in the app.

  4. Get outcomes back#

    Subscribe once with POST /webhooks. Every event arrives signed, with retries, at your endpoint. Webhooks guide →

At a glance#

Base URLhttps://api.lojiq.ai/v1
AuthAuthorization: Bearer lojiq_live_… or X-Lojiq-Api-Key: lojiq_live_… (lojiq_test_… in a sandbox)
FormatJSON request and response bodies; CSV for the export; audio for voice previews
ErrorsOne envelope, { error, message?, request_id }, with stable snake_case codes. Every code →
RetriesIdempotency-Key on POST /leads and on every call-creating POST: a retry never makes a second lead or a second paid call
Rate limit60 requests per minute per key by default, Retry-After on 429
PricingAPI requests are free. Calls and texts you start through the API bill tokens exactly like the app.
VersioningPath-versioned (/v1); additive changes without notice, breaking changes only in a new version. Policy →
Request idEvery response carries X-Request-Id; quote it when you write to support@lojiq.ai

Every endpoint#

All 45 endpoints, grouped the way the reference is. Not yet available marks endpoints that exist in the API but are not usable on production yet — their reference pages say what to use meanwhile.

EndpointWhat it doesScopeStatus
Meta · 2 endpoints
GET /API metadataany scopeLive
GET /event-catalogList webhook event typeswebhooks:manageLive
Account · 1 endpoint
GET /accountGet your organizationaccount:readLive
Leads · 7 endpoints
GET /leadsList leadsleads:readLive
POST /leadsCreate a leadleads:writeLive
GET /leads/{id}Get a leadleads:readLive
PATCH /leads/{id}Update a leadleads:writeLive
POST /leads/bulkBulk import leads from CSVleads:writeLive
POST /leads/inspect-csvPreflight a CSVleads:writeLive
GET /leads.csvExport leads as CSVleads:readLive
Contacts · 2 endpoints
GET /contactsList contactscontacts:readNot yet available
POST /contactsCreate a contactcontacts:writeNot yet available
Campaigns · 4 endpoints
GET /campaignsList campaignscampaigns:readLive
GET /campaigns/{id}Get a campaigncampaigns:readLive
POST /campaigns/{id}/startStart (or resume) a campaigncampaigns:writeLive
POST /campaigns/{id}/stopPause a campaigncampaigns:writeLive
Voice agents · 9 endpoints
GET /agentsList voice agentsagents:readLive
POST /agentsCreate a voice agentagents:writeLive
GET /agents/{id}Get a voice agentagents:readLive
PATCH /agents/{id}Update a voice agentagents:writeLive
DELETE /agents/{id}Delete a voice agentagents:writeLive
POST /agents/{id}/phone-numberAssign an inbound numberagents:writeLive
DELETE /agents/{id}/phone-numberUnassign the inbound numberagents:writeLive
GET /agents/{id}/callsList an agent's callscalls:readLive
POST /agents/{id}/callsStart a call with an agentcalls:writeLive
Calls · 6 endpoints
GET /callsList callscalls:readLive
POST /callsStart an ad-hoc callcalls:writeLive
GET /calls/{id}Get a callcalls:readLive
GET /calls/{id}/transcriptGet a call transcriptcalls:readLive
POST /calls/{id}/hangupEnd a live callcalls:writeLive
GET /calls/{id}/recordingGet a call recordingcalls:readLive
Voices · 2 endpoints
GET /voicesList voicesvoices:readLive
GET /voices/{id}/previewPreview a voicevoices:readLive
Appointments · 2 endpoints
GET /appointmentsList appointmentsappointments:readLive
POST /appointments/{id}/cancelCancel an appointmentappointments:writeLive
Deals · 2 endpoints
GET /dealsList dealsdeals:readNot yet available
PATCH /deals/{id}Update a dealdeals:writeNot yet available
Webhooks · 4 endpoints
GET /webhooksList webhook subscriptionswebhooks:manageLive
POST /webhooksCreate a webhook subscriptionwebhooks:manageLive
PATCH /webhooks/{id}Update a webhook subscriptionwebhooks:manageLive
DELETE /webhooks/{id}Delete a webhook subscriptionwebhooks:manageLive
Reference files · 4 endpoints
GET /openapi.yamlOpenAPI spec (YAML)no keyLive
GET /getting-started.mdGetting-started guide (Markdown)no keyLive
GET /sdk/voice.jsBrowser voice SDK (ES module)no keyLive
GET /docsBuilt-in reference pageno keyLive