Agents that do things,
not just say them.
We build your agent to call your APIs mid-conversation — look up an order, write to a CRM, charge a card, page an on-call — without dropping context or pausing the caller. You bring the endpoints; we do the wiring.
import { tool } from "@convexa/sdk"; export const lookupOrder = tool({ name: "lookup_order", description: "Look up an order by ID. Returns status, items, and ETA.", parameters: z.object({ orderId: z.string().regex(/^ORD-\d{6}$/), }), run: async ({ orderId }) => { const r = await fetch(`https://api.acme.com/orders/${orderId}`); return r.json(); }, });
Tool calls happen
during the call,
not after.
Convexa runs your functions inline in the conversation loop. The agent waits for a result, narrates a polite hold (“one sec, let me pull that up”), and continues — typically in around 140 ms.
Parallel execution
The model calls multiple tools in one turn — look up the order, check inventory, fetch the customer’s tier — and reasons over the results.
Graceful waiting
If a tool will take > 300 ms, the agent fills with a natural “let me check that” line — never silent dead air.
Validated arguments
JSON-schema or Zod validation runs before your function executes. Bad arguments are refused without you writing the guard.
Retry & fail-safe
Retries with exponential backoff, tuned per tool. On final failure, the agent owns up — “the system isn’t responding, can I take a message?”
Secrets stay yours
Tool URLs and headers are stored encrypted, scoped per-agent, never logged. The model never sees raw credentials.
Per-tool permissions
We flag sensitive tools as “requires_confirmation” and the agent reads the action back to the caller before invoking — perfect for refunds, charges, deletions.
The difference between
an agent that feels alive
and one that doesn’t.
Most voice platforms run tools serially with the LLM call. Convexa runs them in the same forward pass.
1.8 second tool round-trip
620 ms — including the tool
A few of the tools
we wire up for customers.
Convexa isn’t a closed library. Any HTTP endpoint, any internal service, any third-party SaaS — tell us where it lives and our team connects it to your agent. It pairs naturally with order management and appointment scheduling workflows.
lookup_order
Pull order status, items, ETA, tracking URL.
get_customer
Profile by phone or account ID. Tier, balance, last contact.
book_appointment
Real-time slot lookup + booking in Calendly, Acuity, or your DB.
charge_card
Tokenized capture; secrets never seen by the model. PCI scope contained.
refund
Confirmation-gated. Reads the amount back before executing.
open_ticket
Create in Zendesk, Intercom, Linear, or Jira. Auto-tagged from intent.
send_sms
Drop a follow-up text from the same agent number.
send_email
Templated, with caller-fillable variables.
write_crm
Update Salesforce, HubSpot, Pipedrive on call outcome.
page_oncall
Trip a PagerDuty page when the caller mentions a P0 keyword.
repeat_rx
Clinical-system-gated repeat prescriptions. NHS DSPT-scoped.
custom HTTP
Any internal service. Auth via header, mTLS, or OAuth.