Managed Agents API Coming soon
Lojiq's agents are the product: the sales caller that works a list, the receptionist that answers your line, the texting journeys that keep a thread alive, the follow-up agent that never forgets a callback. The Managed Agents API lets you run those exact agents inside your own software, with Lojiq operating them, and pay only for what they do.
Nothing on this page is callable yet. This is a pre-release preview so you can plan an integration and tell us what you need. The resource shapes below are the current draft; paths, field names and limits may change until the launch entry appears in the changelog, and Managed Agents sits outside the versioning policy until then. Everything else on this site (Leads, Webhooks, Voice agents) is live and is the foundation this builds on: the same host, the same keys, the same webhooks.
What "managed" means#
Today's Voice agents endpoints let you bring your own prompt and voice and place calls with it — you write the agent, Lojiq runs the call. A managed agent is the other way round: Lojiq brings the agent — its playbook, objection handling, compliance behaviour, memory of each lead, retries and follow-up logic, the same agents that ran more than 110,000 calls and 54,000 text enrollments in the last 30 days — and you bring the business facts and the lead. You get the outcome, not a prompt to maintain.
| Voice agents API (live) | Managed Agents API (coming) | |
|---|---|---|
| Who writes the agent | You (system_prompt, voice, knobs) | Lojiq; you add business facts and rules in a short addendum. The prompt itself is never exposed. |
| Unit of work | One call | A job: one lead, callback, enrollment or candidate worked to an outcome across calls, texts and time |
| Channels | Phone, browser | Outbound phone, an inbound number, and two-way SMS inside consented threads |
| What comes back | Transcript, recording, events | job.* webhooks with the outcome, the transcript and recording links, plus the familiar call.*, appointment.* and lead.* events carrying a job_id |
| Compliance | Consent and DNC checks on each call you place | Consent, do-not-call, calling hours, frequency caps, AI disclosure and recording rules enforced by Lojiq on every attempt; the API can only make them stricter |
| Billing | Per minute, on completion | Per use — voice minutes, carrier minutes, connection fees, text segments — plus a per-job fee per agent type, through your organization's token wallet, with a budget on every job |
The agents you will be able to run#
Sales caller
Dials a lead, qualifies, handles objections, books an appointment or warm-transfers to your rep, leaves a voicemail (and optionally a follow-up text), retries on a schedule, stops at a clean outcome. The agent behind Lojiq campaigns.
Needs from you: caller-ID numbers (Lojiq provides a local-presence pool), a calling window and time zone, a compliance preset, the offer and business facts, a persona, a transfer target.
Receptionist
Answers your business line: greets, answers questions from your business profile, routes to the right person, takes messages, books appointments, handles after-hours and emergencies. Can run on a number you already own.
Needs from you: an inbound number (ours, or forward yours), hours and after-hours behaviour, the business profile / FAQ / website, a phone directory for transfers, a persona.
Texting journey
Opens a consented thread, replies inside it as the agent, moves the lead toward a goal (book, reply, call), hands to a human or triggers a call when the lead says yes, stops on STOP. Raw "send an SMS to any number" is deliberately not offered.
Needs from you: a 10DLC-registered brand and campaign, a sending number, the goal and brand voice, quiet hours and caps, consent evidence per lead.
Follow-up caller
Calls back at the agreed time with the context of the last conversation, sends appointment confirmations and 24-hour / 1-hour reminders, chases quiet threads, re-engages interested leads.
Needs from you: caller-ID, hours, a compliance preset, the context (previous call or appointment), the same persona as the first contact. Ships after the first two agents.
Recruiter screener
Introduces a job to a candidate over text and a short call, sends a secure interview link, runs a recorded spoken interview with a separate interviewer agent, scores it against your rubric — and never rejects anyone; a person decides.
Needs from you: a job listing (facts, pay, shifts, location), a rubric, a recruiting number, personas for the recruiter and the interviewer.
How an integration would look#
Three calls, then listen.
Look at the catalog#
GET /managed-agents/cataloglists the agent types enabled for your organization, with their version, channels, what each needs from you, the pricing unit and the guardrails it runs under. Never the prompt.Create your copy and turn it on#
POST /managed-agentswith thetype, anameand yourconfig(validated against the type's schema). Attach a number withPOST /managed-agents/{id}/phone-number, thenPOST /managed-agents/{id}/activate, which runs the launch checks (balance, number present, A2P registration for texting, compliance preset complete) and answers409 activation_blockedwithblocked_reasonsif anything is missing.Give it work#
POST /managed-agents/{id}/jobswith a lead (inline, with the same consent fields asPOST /leads, or bylead_id) or a task ("call this person Tuesday 3 pm about the quote"), a token budget, and anIdempotency-Key. Receptionists create their own jobs: every inbound call is one.Draft — shapes may change before launchcurl -s -X POST "https://api.lojiq.ai/v1/managed-agents/8c1d…/jobs" \ -H "Authorization: Bearer $LOJIQ_KEY" -H "Content-Type: application/json" \ -H "Idempotency-Key: 4e5f2a0c-7b1d-4c8e-9a2f-3b6d1e0c5a77" \ -d '{ "kind": "work_lead", "lead": { "phone_number": "+15551234567", "first_name": "Avery", "consent_source": "web_form", "consented_at": "2026-10-02T16:58:00Z" }, "budget_tokens": 2000, "metadata": { "crm_id": "opp_8812" } }'202 Accepted (draft){ "id": "9f0e1d2c-3b4a-4c5d-8e6f-7a8b9c0d1e2f", "agent_id": "8c1d…", "kind": "work_lead", "status": "queued", "lead_id": "4b1e0d1a-3c4e-4d0a-9f2b-7e1a2b3c4d5e", "budget_tokens": 2000, "spent_tokens": 0, "next_attempt_at": "2026-10-02T17:05:00Z", "created_at": "2026-10-02T17:03:11Z" }Get the outcome#
Subscribe to
job.*with the webhooks you already have, or pollGET /jobs/{id}. A job ends with one outcome:appointment_booked,transferred,interested,not_interested,voicemail_left,do_not_callorno_answer(after the configured attempts), with the transcript and recording links of every attempt.job.completed — webhook body (draft){ "id": "c1d2e3f4-a5b6-4c7d-8e9f-0a1b2c3d4e5f", "type": "job.completed", "organization_id": "7f6e5d4c-3b2a-4190-8877-665544332211", "occurred_at": "2026-10-02T17:21:40Z", "data": { "job_id": "9f0e1d2c-3b4a-4c5d-8e6f-7a8b9c0d1e2f", "agent_id": "8c1d…", "lead_id": "4b1e0d1a-3c4e-4d0a-9f2b-7e1a2b3c4d5e", "outcome": "appointment_booked", "appointment_id": "8d7c6b5a-4f3e-4d2c-9b1a-0f9e8d7c6b5a", "attempts": 2, "calls": ["5e6f7a8b-…", "6f7a8b9c-…"], "summary": "Agreed to a consultation on Thursday at 2pm.", "spent_tokens": 1180 } }
What you pay#
API requests are free. A job bills exactly what the same work costs in the Lojiq app, through the same token wallet (1 token = $0.001), at the rates below — plus a per-job fee per agent type that will be published with the launch entry. Every job carries a token budget; when it is reached the job pauses with job.waiting (reason: budget_reached) rather than silently dialing on, and you raise the budget with PATCH /jobs/{id}. A daily cap per agent and a monthly cap per key sit on top.
| Unit | Rate today (same as the app) | Notes |
|---|---|---|
| AI voice minute | 250 tokens ($0.25) | 30-second minimum per call |
| Carrier minute | 60 tokens ($0.06) | 6-second rounding, 30-token floor |
| Connection fee | 20 tokens ($0.02) per call | |
| SMS segment | 20 tokens ($0.02) | Per segment, not per message |
| Per-job fee | To be announced per agent type | One line item per lead, call, enrollment or candidate worked |
| Sandbox dry runs | Free | No carrier is touched |
Plans and packs are the ones the app sells; an API-only organization is simply an organization with keys and a wallet and no seats.
Rules the API cannot switch off#
These are already enforced for the app and will wrap every managed-agent attempt. The catalog lets you make them stricter, never looser.
- Consent. Outbound sales voice and SMS need recorded consent on the lead (
consent_sourceandconsented_at); a job without it is refused with403 consent_required. - Do-not-call. Suppression lists are checked at job creation (
403 destination_on_dnc) and again before every attempt, failing closed. A lead who says "stop" on a call or texts STOP ends the job with outcomedo_not_call. - Calling hours. Voice 8:00–21:00 in the destination's local time; texting falls back to the most conservative US window when the time zone is unknown. Outside the window a job waits (
job.waiting,reason: calling_window, withnext_window_at). - Frequency. One dial per lead per local day by default, per-number daily caps, per-journey hourly and daily text caps.
- AI disclosure and recording. The agent identifies itself as an AI assistant per Lojiq's disclosure policy; two-party-consent states get the recording disclosure or recording off.
- Hard stop. No AI call runs longer than 15 minutes.
- 10DLC. No texting agent activates without an approved A2P brand and campaign.
- People first. A lead owned by one of your human reps is not worked by an AI job (
409 lead_owned_by_human); organization-level kill switches pause every job.
Sandbox#
In a sandbox organization, jobs run in dry-run by default: the agent's plan and a synthetic outcome are produced, job.* and call.* events fire with simulated: true, no carrier is touched and no tokens are spent. A job may dial a phone on the sandbox's allow-list for real (your own), billing the sandbox's test grant. Texting in a sandbox is always simulated.
Draft surface#
Illustrative; final paths will be published with the contract. Scopes: managed_agents:read, managed_agents:write, jobs:read, jobs:write, usage:read.
| Resource | Operations (draft) | Purpose |
|---|---|---|
| Catalog | GET /managed-agents/catalog, GET /managed-agents/catalog/{type} | Agent types enabled for you: version, channels, what each needs, pricing unit, guardrails. Never prompts. |
| Your agents | POST /managed-agents, GET /managed-agents, GET /managed-agents/{id}, PATCH /managed-agents/{id}, POST/DELETE /managed-agents/{id}/phone-number, POST /managed-agents/{id}/activate · /pause · /archive | Your instances of catalog agents; every config change is versioned and running jobs finish on the version they started with. |
| Jobs | POST /managed-agents/{id}/jobs, GET /managed-agents/{id}/jobs, GET /jobs/{id}, GET /jobs/{id}/events, POST /jobs/{id}/cancel, PATCH /jobs/{id} | Give an agent work; read status, attempts, outcome and spend; cancel (a live call is hung up); raise the budget or move a task time. |
| Usage | GET /usage | Content-free spend by day, agent, job or key. |
Events (draft)#
Delivered by the same signed dispatcher as every other event: managed_agent.activated, managed_agent.paused, job.created, job.started, job.attempt (one per dial or send, with the call_id or message_id), job.waiting (reason: calling_window, budget_reached, needs_human), job.needs_human (transfer requested, escalation phrase, emergency keyword), job.completed, job.failed, job.cancelled, candidate.interviewed (scores, never a decision). Existing call.*, appointment.* and lead.* events keep firing for the same activity and carry job_id.
Principles that will not change#
- Your organization is the key. Same API keys, same scopes model, same host, same webhooks.
- Budgets. Every job carries a budget; a job never spends past it without you raising it.
- Consent and compliance travel with the agent. Opt-outs, DNC, calling hours and frequency caps are enforced by Lojiq, not re-implemented by you — and cannot be disabled through the API.
- No prompts, no raw SMS. You never see or ship a prompt, and there is no endpoint that sends an arbitrary message to an arbitrary number.
- Idempotency. Every
POSTthat can cost money takes anIdempotency-Key. - Versioned. Managed Agents launches with its own changelog entry and joins the versioning policy at that point.
Tell us what you would build#
The order in which agents and channels ship is driven by real integrations. Write to support@lojiq.ai with what your software does and which agent you would run first, and we will put you on the early-access list.