Aquant | Conversational AI
Integration Reference

SIP Integration

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.

Protocol: SIP Auth: Digest (SIP credentials) Media: RTP · PCMU Transport: UDP · TCP · TLS Modes: Call · Conference
Integration handbook · updated 30 July 2026. A standalone reference for integrating with Aquant over SIP. Your Aquant contact provisions the SIP address and credentials for each agent and environment — substitute the values you were given. See what changed in this revision.
Overview What you need SIP address & modes Authentication Placing a call Caller identity Media & codecs Handover Behavior & rules SIP responses Full example After the call Changelog

Overview

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.

Three directions

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.

What you need before you start

SIP addressThe 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 modeWhether 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 credentialsA username / password pair used for SIP digest authentication. Distinct from any ACAI REST API key.
A SIP user agentA 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 supportPCMU (G.711 µ-law, 8 kHz) for audio and telephone-event (RFC 2833) for DTMF.
Where do these come from? Your Aquant administrator generates a SIP identity for the agent and shares the SIP address plus the SIP username/password with you. Ask them to (re)issue one if you don't have it yet.

SIP address & modes

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.

INVITEsip:<sip_username>@<sip-domain>

Anatomy

PartExampleDescription
sip_usernameEOEG31qm4jmpDcOpaque per-agent identity. Aquant resolves the target agent from this value.
sip-domainaquant-call.sip.twilio.comThe SIP domain for the agent, which also selects the answer path. Use exactly the domain you were given.

Two modes, two domains

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.

ModeDomainAnswer pathHandover
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.
Dialing the wrong domain fails as "not available". A 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.
Regeneration invalidates the old address. If the identity is rotated, the previous sip: address stops working immediately. Coordinate rotations with your Aquant contact.

Authentication

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.

  1. Send the initial INVITE

    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..."
  2. Re-send with credentials

    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.

Credentials vs. API keys. The SIP username/password authenticate the call at the SIP layer. They are unrelated to the ACAI REST API api_key/api_secret used for chat, SMS, email, and post-call data.

Placing a call

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

Caller identity

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.

INVITEheader · X-Identity: +14155550123

Field

HeaderTypeDescription
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
Mandatory. 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.

What Aquant does with it

Stored on the callRecorded against the call record and shown in call history.
SearchableCall-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 handoverWhen 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 authThe 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 FromThe SIP From header is untouched. Identity travels only in X-Identity.
Not enforced at the protocol level. A call that omits the header still connects — it simply has no identity recorded, and nothing to forward on a later handover. Malformed values (names, numbers without a country code) are stored verbatim rather than rejected. If identity is missing from your call history, the header was not received; check that your SBC or PBX is actually emitting it.
Identity capture is a Call-mode feature. Addresses on the conference domain do not record X-Identity today. Send it anyway for forward compatibility, but do not rely on it appearing in call history for Conference-mode agents.

Media & codecs

Audio codecPCMU (G.711 µ-law, 8 kHz). Offer it in your SDP.
DTMFtelephone-event (RFC 2833), payload type 101.
Signaling transportUDP / TCP on 5060, or TLS on 5061. Prefer TLS in production.
Media securityRTP, or SRTP when TLS signaling is used. Use SRTP for production traffic.
NATYour SBC/UA must traverse NAT (e.g. rport, symmetric RTP). Endpoints behind NAT without an SBC are unreliable.

Handover (Aquant → your SIP endpoint)

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.

Cold transfer (Call mode)

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.

DestinationSIP only. A sip: or sips: URI you host, e.g. sip:<target>@your-pbx, registered with Aquant in advance.
Phone destinationsNot 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 receiveA 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 seeFor 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 identityWhatever 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.
TimingThe 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.

Warm transfer (Conference mode)

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.

DestinationA SIP URI or a phone number. Both are supported on this path.
Handover briefingOnce 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 seeFor 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.

Call reference (UUI)

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.

Treat it as advisory. The header is omitted rather than faked if the id isn't resolvable at transfer time, so read it defensively. It carries no authorization and identifies a call, not a caller.
Setup is coordinated. The handover destination and its auth are configured on the Aquant side per project, and the destination must be scoped to the same project as the calling agent. Share your endpoint's SIP URI and auth expectations with your Aquant contact — and tell them whether you need cold or warm behaviour, since that decides which mode your address is issued for.

Behavior & rules

RoutingAquant 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 activeThe 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-secretThe sip: address hides the agent's real number. Treat it as sensitive — anyone who has it (and valid credentials) can reach the agent.
Caller identityX-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-listIf the agent enforces caller authentication, the check runs against the SIP Fromnot 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 standingCalls 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 & analysisWhen 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-tripExpect a 407 on the first INVITE. This is normal; answer the challenge and re-send.

SIP responses

Standard SIP status codes you should handle. A 407 on the first INVITE is expected, not an error.

200100 / 180407403404480 / 486503
StatusMeaningWhat it tells you
100 / 180Trying / RingingCall progressing. No action.
200OKCall answered — send ACK and start media.
407Proxy Authentication RequiredExpected first challenge — re-send the INVITE with Proxy-Authorization.
403ForbiddenBad SIP credentials. Verify the username/password and that they're attached to this SIP domain.
404Not FoundUnroutable 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 / 486Unavailable / BusyAgent temporarily not available. Retry later.
503Service UnavailableTransient service issue. Retry with backoff.
Application rejections are answered calls, not SIP errors. Signalling-layer problems (bad credentials, unroutable domain) surface as SIP status codes. But everything decided by the application — unknown or inactive agent, wrong mode for the domain, unauthorized caller, exhausted credit — arrives as a normal 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.

Full example

Snippets for the most common ways to originate the call. Replace the placeholders with your SIP address, credentials, and identity value.

SIPp (test scenario — the auth round-trip + identity)

<!-- 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"

Asterisk (PJSIP dialplan — set identity, dial the trunk)

; 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)

FreeSWITCH (dialplan — sip_h_ injects a custom header)

<action application="set" data="sip_h_X-Identity=+14155550123"/>
<action application="bridge" data="sofia/gateway/aquant/<sip_username>"/>
Verifying the identity. After a test call, confirm the caller identity you sent appears on the call in your Aquant call history — searching for the value you sent should return the call. That's the end-to-end signal that your X-Identity header was received.

After the call

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.

GEThttps://acai-api.aquant.ai/acai/call/{call_record_id}/summary

Authenticate first

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>

Response

{
  "call_record_id": "6cbd7ac0-33ab-4790-9c3c-bdfc64a4e079",
  "status": "Ready",
  "summary": "The caller reached out for assistance regarding..."
}
StatusMeaningWhat to do
ReadySummary is available in summary.Consume it.
PendingAnalysis is still running, or the text is mid-write.Poll again shortly.
FailedAnalysis ran and failed.Stop polling; no summary will arrive.
UnavailableAnalysis 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.
Because the summary is asynchronous, always branch on 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.

Changelog

What changed in this revision of the reference. Behaviour that was already live but undocumented is marked clarified.

DateChange
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.