Connect your telephony — softphone, PBX, SBC, or contact-center platform — to an Aquant agent over SIP. Callers reach the AI agent at a dedicated SIP address; you attach a caller identity and, where configured, the AI can hand the live call over to your systems or agents.
Aquant exposes each agent as a SIP endpoint. Your system places a normal SIP call (an INVITE) to the agent's SIP address; Aquant authenticates the call, answers it, and the AI agent converses with the caller in real time. There is no phone number involved on your side — routing is by an opaque SIP identity, which keeps the agent's underlying number private.
| Inbound (you → Aquant) | Your SIP endpoint dials the agent's SIP address. The AI agent answers and handles the conversation. This is the primary integration. |
| Handover (Aquant → you) | If your agent is configured for handover, the AI can transfer a live call to a destination you host — a human agent or a downstream system (contact center, IVR, queue) reachable at a SIP URI. What's possible depends on the agent's mode. See Handover. |
| After the call (you → Aquant REST) | Recording, transcript and an AI-generated summary are produced after the call ends. The summary is retrievable over the ACAI REST API. See After the call. |
| SIP address | The agent's SIP URI, sip:<sip_username>@<sip-domain>. Issued per agent by your Aquant admin. The domain tells you which mode the address was issued for. |
| Which mode | Whether the address is a Call or Conference identity. This is fixed when the address is issued and decides what kind of handover is available — ask if you aren't sure. |
| SIP credentials | A username / password pair used for SIP digest authentication. Distinct from any ACAI REST API key. |
| A SIP user agent | A softphone, PBX (Asterisk, FreeSWITCH), or SBC that can authenticate with digest and set a custom SIP header — required to pass the mandatory caller identity. |
| Codec support | PCMU (G.711 µ-law, 8 kHz) for audio and telephone-event (RFC 2833) for DTMF. |
Every SIP-enabled agent has a unique address. The user part is an unguessable, server-generated identifier — not the agent's phone number — so you can share it without exposing PSTN details.
| Part | Example | Description |
|---|---|---|
sip_username | EOEG31qm4jmpDc | Opaque per-agent identity. Aquant resolves the target agent from this value. |
sip-domain | aquant-call.sip.twilio.com | The SIP domain for the agent, which also selects the answer path. Use exactly the domain you were given. |
An address is issued for exactly one mode. The mode determines how Aquant answers the call and, crucially, what handover is possible. You cannot switch modes by changing the domain you dial — an address only resolves on its own domain.
| Mode | Domain | Answer path | Handover |
|---|---|---|---|
| Call | aquant-call.sip.twilio.com | One-on-one media stream between the caller and the AI. | Cold transfer to a SIP destination only. The AI drops off. |
| Conference | aquant-conf.sip.twilio.com | The caller is placed in a conference the AI joins. | Warm transfer to a SIP or phone destination, with the AI still on the call. |
sip_username is only valid on the domain it was issued for. If you send a Call-mode username to the conference domain (or the reverse), the agent cannot be resolved and the caller hears a short unavailable announcement. Check the full address, not just the user part.
sip: address stops working immediately. Coordinate rotations with your Aquant contact.
Inbound SIP calls are authenticated with digest (challenge/response) using your SIP credentials. Aquant challenges the first INVITE with 407 Proxy Authentication Required; your endpoint answers the challenge and re-sends the INVITE with a Proxy-Authorization header. Most SIP clients and PBXs do this automatically once you configure the username and password.
Your endpoint sends an INVITE to the agent's SIP address. Aquant responds 100 Trying then 407 with a challenge (realm, nonce, qop=auth).
# Aquant → you SIP/2.0 407 Proxy Authentication Required Proxy-Authenticate: Digest realm="sip.twilio.com", qop="auth", nonce="pYzyfw...ractXN", opaque="7e3552..."
ACK the 407, then send a second INVITE with a computed Proxy-Authorization digest response built from your SIP username and password.
# you → Aquant Proxy-Authorization: Digest username="your-sip-user", realm="sip.twilio.com", qop=auth, nc=00000001, cnonce="634cbdc2", nonce="pYzyfw...ractXN", uri="sip:<sip_username>@aquant-call.sip.twilio.com", response="f69eb77f...1eed34", algorithm=MD5, opaque="7e3552..."
On success Aquant answers 200 OK and the call is connected.
api_key/api_secret used for chat, SMS, email, and post-call data.
A complete, successful inbound call follows the standard SIP dialog, with one digest round-trip.
# Signaling sequence (you ↔ Aquant) you → INVITE # no credentials Aquant → 100 Trying Aquant → 407 Proxy Auth Required you → ACK you → INVITE # with Proxy-Authorization Aquant → 100 Trying Aquant → 180 Ringing Aquant → 200 OK # call answered you → ACK ⇄ RTP media (PCMU) # AI conversation you → BYE # hang up Aquant → 200 OK
Every inbound call must carry the caller's identity in an X-Identity header on the INVITE. The value must be a valid phone number including the country and area code (E.164). Aquant records it against the call and makes it available in the call history.
| Header | Type | Description | |
|---|---|---|---|
X-Identity |
string (E.164) max 256 chars |
required | The caller's phone number in E.164 format — country code + area code + subscriber number, e.g. +14155550123. Must be present on every INVITE. Surrounding whitespace is trimmed; anything beyond 256 characters is truncated. |
# INVITE header set by your endpoint — required, must be a phone number X-Identity: +14155550123
X-Identity is required on every inbound call and must be a valid phone number that includes the country and area code, in E.164 format (e.g. +14155550123). Do not send free-form text, names, or a number without its area code.
| Stored on the call | Recorded against the call record and shown in call history. |
| Searchable | Call-history search matches on the identity as well as the caller number and name, so you can find a call by the value you sent. |
| Forwarded on handover | When a Call-mode call is transferred to your SIP endpoint, Aquant re-attaches the value as X-Identity on the outbound INVITE, so the receiving system still sees who is calling. See Handover. |
| Never used for auth | The value is caller-supplied and treated as untrusted. It grants nothing and is not consulted by the caller allow-list — see Behavior & rules. |
Does not change From | The SIP From header is untouched. Identity travels only in X-Identity. |
X-Identity today. Send it anyway for forward compatibility, but do not rely on it appearing in call history for Conference-mode agents.
| Audio codec | PCMU (G.711 µ-law, 8 kHz). Offer it in your SDP. |
| DTMF | telephone-event (RFC 2833), payload type 101. |
| Signaling transport | UDP / TCP on 5060, or TLS on 5061. Prefer TLS in production. |
| Media security | RTP, or SRTP when TLS signaling is used. Use SRTP for production traffic. |
| NAT | Your SBC/UA must traverse NAT (e.g. rport, symmetric RTP). Endpoints behind NAT without an SBC are unreliable. |
If your agent is configured for handover, the AI can transfer a live call to a destination you host — a human agent, or a downstream system such as a contact-center platform, IVR, or queue. Aquant places an outbound call to your endpoint and connects it with the caller. How it behaves depends on the agent's mode, and the two paths are not equivalent.
Aquant re-points the live call at your SIP destination. The AI leaves the call at that moment — there is no announcement to the receiving party and no three-way period.
| Destination | SIP only. A sip: or sips: URI you host, e.g. sip:<target>@your-pbx, registered with Aquant in advance. |
| Phone destinations | Not supported on this path. If the configured destination resolves to a phone number, the transfer is skipped and the caller simply stays with the AI. Phone handover requires Conference mode. |
| What you receive | A fresh INVITE from Aquant's media edge carrying the caller's audio. Your endpoint completes auth as agreed (digest credentials supplied per destination, or an IP allow-list) and offers PCMU. |
From you will see | For a caller who reached the agent over the PSTN, the caller's own number. For a caller who reached the agent over SIP or from a browser, the agent's number — a SIP or WebRTC origin has no dialable number to forward. Do not treat From as the end customer's identity. |
| Caller identity | Whatever arrived on the inbound X-Identity is re-attached to the outbound INVITE as X-Identity. On a SIP-originated call this is the only reliable way to know who is calling. |
| Call reference (UUI) | A User-to-User header carries the Aquant call id. See Call reference. |
| Timing | The AI says a closing line first and the transfer fires a few seconds later, so expect a short gap between "transferring you now" and your INVITE. |
The caller is already in a conference. Aquant dials your destination into that same conference, so the AI, the caller and your agent are briefly on the call together.
| Destination | A SIP URI or a phone number. Both are supported on this path. |
| Handover briefing | Once your agent answers, the AI can speak a short summary of the conversation so far. This can be disabled per agent for a silent join. |
From you will see | For PSTN callers the original caller ID is forwarded where the carrier and regulator permit it; otherwise the agent's own number is used. SIP-originated legs always present the agent's number. |
| Call reference (UUI) | SIP destinations receive a User-to-User header carrying the Aquant call id. See Call reference. Phone destinations do not — there is no header to carry it on. |
Every SIP handover — cold or warm — carries the Aquant call id in a standard User-to-User header, so you can stitch the leg you just received to the call as Aquant recorded it. The value is a small JSON object, hex-encoded because braces and quotes are not safe in a SIP URI, with the encoding declared inline:
# On the outbound INVITE User-to-User: 7b22757269223a2237383334373935362d...227d;encoding=hex # hex-decoded {"uri": "78347956-f990-449c-9566-ac66e7cd9fd4"}
Decode the hex to UTF-8 and parse the JSON; uri is the call record id. That is the same id accepted by the post-call summary endpoint, so a transferred call can be reconciled with its transcript and summary later — see After the call.
| Routing | Aquant selects the agent from the sip_username in the Request-URI, matched against the mode of the domain you dialed. The SIP From is not used for routing. |
| Agent must be active | The target agent must be active and provisioned for SIP on the domain you dialed. Otherwise the call is answered and an unavailable announcement is played. |
| Address is a semi-secret | The sip: address hides the agent's real number. Treat it as sensitive — anyone who has it (and valid credentials) can reach the agent. |
| Caller identity | X-Identity is required on every call and must be the caller's phone number in E.164 format (country + area code, e.g. +14155550123). It's stored, listed, and searchable. |
| Caller allow-list | If the agent enforces caller authentication, the check runs against the SIP From — not X-Identity — and compares it to registered caller phone numbers. A SIP From will not match a phone-number allow-list, so agents reached over SIP should either have caller authentication off or have the SIP From registered. Rejected callers hear the agent's unauthorized-caller notice. |
| Account standing | Calls are rejected if the owning organization is deactivated or has exhausted its credit: the caller hears "Sorry, this service is temporarily unavailable. Please try again later." and the call ends. Treat this as retryable-after-remediation, not as a fault in your integration. |
| Recording & analysis | When enabled on the agent, the call is recorded and transcribed, and a summary is generated after it ends. See After the call. |
| One digest round-trip | Expect a 407 on the first INVITE. This is normal; answer the challenge and re-send. |
Standard SIP status codes you should handle. A 407 on the first INVITE is expected, not an error.
| Status | Meaning | What it tells you |
|---|---|---|
100 / 180 | Trying / Ringing | Call progressing. No action. |
200 | OK | Call answered — send ACK and start media. |
407 | Proxy Authentication Required | Expected first challenge — re-send the INVITE with Proxy-Authorization. |
403 | Forbidden | Bad SIP credentials. Verify the username/password and that they're attached to this SIP domain. |
404 | Not Found | Unroutable address — wrong SIP domain, or the domain isn't provisioned. Note that a valid domain with an unknown sip_username answers instead; see below. |
480 / 486 | Unavailable / Busy | Agent temporarily not available. Retry later. |
503 | Service Unavailable | Transient service issue. Retry with backoff. |
200 OK followed by a spoken message and a hangup. If you are looking for a non-2xx response to detect these, you will not find one: monitor for very short answered calls instead, and check the agent's call history.
Snippets for the most common ways to originate the call. Replace the placeholders with your SIP address, credentials, and identity value.
<!-- INVITE with X-Identity; SIPp fills [authentication] from -au/-ap --> <send retrans="500"><![CDATA[ INVITE sip:<sip_username>@aquant-call.sip.twilio.com SIP/2.0 Via: SIP/2.0/[transport] [local_ip]:[local_port];rport;branch=[branch] From: "caller" <sip:caller@your-sbc>;tag=[call_number] To: <sip:<sip_username>@aquant-call.sip.twilio.com> Call-ID: [call_id] CSeq: 1 INVITE Contact: <sip:caller@[local_ip]:[local_port]> X-Identity: +14155550123 Content-Type: application/sdp Content-Length: [len] v=0 o=caller 1 1 IN IP[local_ip_type] [local_ip] s=- c=IN IP[media_ip_type] [media_ip] t=0 0 m=audio [media_port] RTP/AVP 0 101 a=rtpmap:0 PCMU/8000 a=rtpmap:101 telephone-event/8000 ]]></send> # run: sipp aquant-call.sip.twilio.com:5060 -sf scenario.xml -m 1 \ -au "your-sip-user" -ap "your-sip-password"
; register a trunk to the Aquant SIP domain with your SIP credentials, ; then add the identity header and dial the agent's sip_username. exten => _X.,1,Set(PJSIP_HEADER(add,X-Identity,+14155550123)=) same => n,Dial(PJSIP/<sip_username>@aquant-trunk)
sip_h_ injects a custom header)<action application="set" data="sip_h_X-Identity=+14155550123"/> <action application="bridge" data="sofia/gateway/aquant/<sip_username>"/>
X-Identity header was received.
When the agent has recording and analysis enabled, Aquant transcribes the call and generates a summary once it ends. The summary is available over the ACAI REST API, so a SIP integration can pull conversation outcomes back into your CRM or ticketing system without screen-scraping the console.
Exchange your ACAI API credentials for a short-lived bearer token (valid one hour, refreshed on use), then call the summary endpoint with it. The token is bound to one agent, and the endpoint only returns calls handled by that agent.
# 1 — get a session token POST https://acai-api.aquant.ai/acai/auth { "api_key": "...", "api_secret": "...", "agent_id": "...", "sender_id": "your-system" } # 2 — read the summary GET https://acai-api.aquant.ai/acai/call/{call_record_id}/summary Authorization: Bearer <token>
{
"call_record_id": "6cbd7ac0-33ab-4790-9c3c-bdfc64a4e079",
"status": "Ready",
"summary": "The caller reached out for assistance regarding..."
}
| Status | Meaning | What to do |
|---|---|---|
Ready | Summary is available in summary. | Consume it. |
Pending | Analysis is still running, or the text is mid-write. | Poll again shortly. |
Failed | Analysis ran and failed. | Stop polling; no summary will arrive. |
Unavailable | Analysis was never requested for this call — recording or analysis is off on the agent. | Stop polling; enable the feature on the agent if you need summaries. |
status. A null summary on its own doesn't tell you whether to wait or give up. Calls belonging to any other agent return 404, so use the token for the agent that handled the call. The endpoint is rate limited per token; poll at a few seconds' interval rather than in a tight loop.
What changed in this revision of the reference. Behaviour that was already live but undocumented is marked clarified.
| Date | Change |
|---|---|
| 30 Jul 2026 |
Modes documented. Added the Call vs Conference domain split, what each answer path implies for handover, and the failure mode when an address is dialed on the wrong domain. Handover rewritten. Cold (Call mode, SIP-only destination, AI drops off) and warm (Conference mode, SIP or phone destination, spoken briefing) are now described separately, including the From value your endpoint will actually see.Call reference on handover. SIP handovers now carry the Aquant call id in a User-to-User header as hex-encoded JSON, so a transferred leg can be reconciled with the call record and its summary.Account standing gate. Inbound calls are now rejected with a spoken notice when the owning organization is deactivated or out of credit. Post-call summary API. New GET /acai/call/{id}/summary section.ACP → ACAI. REST references renamed; the API is served under /acai, with /acp retained as a permanent alias for existing callers.Clarified: identity is capped at 256 characters and is never used for authentication; identity is forwarded onward on a Call-mode handover; identity is searchable in call history; identity is not captured on Conference-mode addresses; the caller allow-list evaluates the SIP From rather than X-Identity; application-level rejections arrive as answered calls rather than SIP error codes.
|
| 1 Jul 2026 | Initial reference — SIP address, digest authentication, the mandatory X-Identity header, media and codecs, and worked SIPp / Asterisk / FreeSWITCH examples. |