Changelog
Newest first. Dates are when the change reached production. Entries marked Upcoming are staged and not yet live.
Upcoming Upcoming#
Public API gets its own host and this documentation#
- New host:
https://api.lojiq.ai/v1is the public API's address. The previous path form (/public/v1) keeps working on the new host as an alias. The private app API is not served onapi.lojiq.ai. - docs.lojiq.ai: this site — guides, the full reference for all 45 endpoints, downloadable OpenAPI 1.2.0, Postman collection and SDK stubs.
- Default rate limit set to 60 requests per minute per key.
- API requests are free (previously each request was metered as one token). Calls and texts started through the API bill as in the app.
- Keys can be created only by organization Owners and Admins; every creation, rotation and revocation is audited. Rotate issues a replacement key in one step.
- Sandbox organizations with
lojiq_test_keys;GET /accountgainssandboxandkey_mode. - One error envelope on every non-2xx answer:
{ error, message?, request_id }, withX-Request-Idon every response including401and429. Storage error text no longer appears aserror; Lojiq-side failures are500 internal_error. Ids from another organization answer404on updates as well as reads. Unknown paths answer404 not_foundwith adocslink. Idempotency-KeyonPOST /leads,POST /callsandPOST /agents/{id}/calls: a retried request never creates a second lead or places a second call.- Leads:
phone_numberis canonicalised to E.164 on create and in thephone_numberfilter; writes take an allow-list (400 unknown_field:<name>) and gaincredit_score,annual_income,notes;phone_numberis immutable onPATCH;campaign_idmust be yours (404 campaign_not_found);GET /leadsgains astatusfilter and returnsfull_name,consent_source,consented_at,updated_at;POST /leads/bulkcaps the CSV at 5,000,000 bytes (413). - Campaigns:
GET /campaignsworks again (it selected a column that did not exist), is paged and filters bystatus;start/stopgo through the same service as the app's Resume/Pause buttons, only movepaused↔active(409 campaign_not_resumable/campaign_not_activeotherwise), answer402 insufficient_balancewhen the wallet is empty and reportchanged. - Calls:
GET /callsandGET /agents/{id}/callsreturncreated_at(notstarted_at),call_outcome,dispositionandduration_seconds;GET /calls/{id}/transcriptworks again and falls back to the call's transcript text and summary. - Appointments: list filters by
statusandlead_idand returnscampaign_id,duration_minutes,timezone,source; cancel storesreason(500 characters). - Voices:
preview_urlis an absolutehttps://api.lojiq.ai/v1/…URL. - Not yet available:
GET/POST /contacts,GET /dealsandPATCH /deals/{id}answer501 feature_unavailableuntil their storage exists; they stay in the reference with the badge. POST /leads/bulkand all webhook endpoints are backed by the storage this release provisions.
On the roadmap#
call.completedandlead.disposition_changedfor campaign and receptionist calls (today they fire only for API-initiated actions);call.ended.- Read the per-row errors of a bulk import (
GET /leads/bulk/{job_id}); asynchronous bulk import for large files. - Webhook delivery log and test ping (
GET /webhooks/{id}/deliveries,POST /webhooks/{id}/test); signed, expiring recording links. - Managed Agents API; native Zapier app; usage reporting endpoints.
2026-07-03 — Voice agents, wave 2#
max_duration_secondson templates and calls (60–7200 s; browser calls default to 30 minutes).- Organization concurrency cap enforced on call creation (
429 concurrency_limit_reached). - Inbound numbers:
POST/DELETE /agents/{id}/phone-numberwithinbound_webhook_configured. - Browser voice SDK at
/sdk/voice.js. - Hardening from an adversarial review: transcript endpoint checks the call belongs to your organization before reading; voice previews use fixed sample text;
fromnumbers must be owned by your organization.
2026-07-02 — Voice agents#
- New:
GET/POST /agents,GET/PATCH/DELETE /agents/{id},POST /agents/{id}/calls,GET /agents/{id}/calls,POST /calls,POST /calls/{id}/hangup,GET /calls/{id}/recording,GET /voices,GET /voices/{id}/preview,GET /account. - New scopes:
agents:read,agents:write,voices:read,account:read. - Provider-neutral call template (
system_prompt,voice,temperature,first_speaker,recording_enabled,greeting) with{{variable}}substitution fromtemplate_context. - Phone calls go through the same carrier stack, answering-machine detection and DNC check as campaign calls.
2026-06-25 — Token metering#
- Calls started through the API bill tokens on completion like app calls;
402 insufficient_balanceon creation when the balance is exhausted.
2026-05-15 — Public API v1#
- First release: API keys with scopes and per-key rate limits;
X-Request-Idon every response. - Leads (
GET/POST /leads,GET/PATCH /leads/{id},POST /leads/bulk,POST /leads/inspect-csv,GET /leads.csv), contacts, campaigns (start/stop), calls and transcripts, deals, appointments. - Outbound webhooks: subscriptions,
GET /event-catalog, HMAC-SHA256 signatures (X-Lojiq-Signature-256), 8-attempt retry schedule, auto-disable after 25 consecutive failures, SSRF-safe target validation. - Reference files:
/openapi.yaml,/getting-started.md,/docs.