Documentation
Everything needed to connect a system to the network and keep it running, in one document. Start with the contents below or use your browser find function.
Contents
Nine sections. Every link below is an anchor into this page, so nothing here opens an empty article.
How to read this page
Four conventions hold across every section below.
- Hostnames are placeholders. Examples use
sip.solvedtele.comandapi.solvedtele.com. Yours come from onboarding. - Credentials are issued, not self-served. A trunk is an authenticated path onto the PSTN, so it is opened by a person. See credentials and environments.
- Numbers are E.164. Send
+14045550143, not404-555-0143, everywhere a number appears. - Rates are the published card. Every figure here appears on the pricing page with its footnotes.
Adjacent references
Three places that answer questions this document deliberately does not repeat.
API reference
Endpoint tables for numbers, calls, recordings, transcriptions, messages, routing, sub-accounts, CDRs, and agents, plus auth, pagination, idempotency, and error format.
Open the referenceIntegrations
How specific softswitches, PBXs, contact center platforms, warehouses, and agent runtimes connect, protocol by protocol.
See integrationsSystem status
Current state of all twelve components, the maintenance window policy, and what to send when you report a problem.
Check statusGetting started
What an account gives you, how credentials are issued, and the shortest path from nothing to a connected call.
What an account includes
One account carries everything: origination and termination, DID inventory, SMS and MMS, programmable routing, recording and transcription, hosted PBX, and AI Voice Agents. There are no feature tiers to buy into and no per-seat license to use the network. You turn on what you need and pay the published rate for the usage it generates.
Sub-accounts sit underneath the parent account and are how platform customers separate their own tenants. Each sub-account gets its own numbers, trunks, routing configuration, and CDR rollup, while rating and settlement stay at the parent. See sub-account rollups.
Credentials and environments
Credentials are issued during onboarding rather than from a self-serve form, because a trunk on a Tier 2 network is an authenticated path onto the PSTN. You receive three things: a SIP trunk hostname, either a SIP username and password or an IP allowlist entry, and an API bearer token scoped to your account.
Ask for a sandbox token at the same time. Sandbox accepts the same API calls, returns the same object shapes, and delivers the same webhooks, but numbers are reserved from a test pool and calls terminate to a test answering service instead of the PSTN. Build against sandbox, then swap the token and the trunk hostname.
Placeholders in this document. Examples use sip.solvedtele.com as the trunk hostname and api.solvedtele.com as the API host. Your real hostnames, trunk credentials, and bearer token come from onboarding and may differ. Nothing on this page is a live endpoint you can authenticate against.
Connecting your first trunk
Decide first whether you are authenticating by registration or by IP. Registration suits endpoints on dynamic addresses and small PBXs. IP authentication suits softswitches and anything carrying volume, because it removes the registration refresh from the failure surface. Both are described in registration and IP authentication.
Then point your system at the trunk hostname, allow the codecs you want, and place a test call to a number you control. A working Asterisk configuration is in the Asterisk example. If the first call fails, the SIP response code tells you which side rejected it; see reading SIP response codes.
Buying and assigning your first number
Search inventory by rate center, state, or prefix, reserve the number you want so nobody else takes it while you finish the flow, then buy it and assign it to a trunk or a routing target. All four steps are API calls, which is why most platform customers put number selection inside their own signup flow rather than in a support ticket.
Local voice DIDs start at $1.10 per month with a $0.40 one-time charge, toll-free at $1.50 per month, and vanity toll-free at $1.50 per month plus a $30 one-time reservation. Add Enhanced 911 before the number carries real traffic; see E911 and address records.
Placing your first call
You can originate two ways. Send an INVITE from your own softswitch over the trunk, which is what a PBX or dialer does, or call the API and let the network bridge both legs, which is what a platform without its own media stack does. The API route is documented in the API reference.
Set a From header that matches a DID on your account. Calls presenting a number you do not own are rejected, which is the single most common cause of a 403 on a new trunk. Internal traffic that stays on our network is free in both directions.
Go-live checklist
- Trunk authenticates, registers if applicable, and survives a restart of your own system.
- Outbound calls complete to landline, mobile, and toll-free destinations.
- Inbound calls reach the right target, including after your failover target takes over.
- DTMF is captured by whatever IVR the call lands in. See DTMF and media.
- E911 address records are in place for every DID that a person might dial 911 from.
- Recording, if you use it, is on at the right scope and the retention window matches your obligations.
- A webhook endpoint is receiving events and verifying signatures. See signature verification.
- Spend caps and velocity limits are set so a misconfiguration costs you a small number instead of a large one.
SIP and trunking
Authentication, a working configuration, codecs, DTMF, channel counts, failover, and how to read a rejection.
Registration and IP authentication
Registration authenticates with a username and a password and refreshes on an interval. It works from behind NAT and from dynamic addresses, which is why desk phones, softphones, and small PBXs use it. The cost is that an expired or failed registration takes inbound calls with it, so the registration interval belongs in your monitoring.
IP authentication skips all of that: you give us the source addresses your traffic comes from, we add them to the trunk allowlist, and unauthenticated addresses are rejected at the edge. Use it for softswitches, dialers, and anything carrying volume. Each trunk carries its own credentials and its own access control list, so a compromised tenant does not become a compromised account.
A 403 on a new trunk is almost always one of three things: the source IP is not on the allowlist, the From header presents a number that is not on your account, or the destination prefix is outside the set your account is allowed to dial.
Asterisk configuration example
A complete PJSIP trunk against a registration-authenticated endpoint. Replace the user, the password, and the hostname with the values from onboarding. The same shape maps directly onto FreeSWITCH gateways and Kamailio dispatcher entries.
; pjsip.conf
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0:5060
[solvedtele-auth]
type=auth
auth_type=userpass
username=1035551212
password=TRUNK_PASSWORD_FROM_ONBOARDING
[solvedtele-aor]
type=aor
contact=sip:sip.solvedtele.com:5060
qualify_frequency=30
[solvedtele]
type=registration
transport=transport-udp
outbound_auth=solvedtele-auth
server_uri=sip:sip.solvedtele.com
client_uri=sip:1035551212@sip.solvedtele.com
contact_user=1035551212
retry_interval=60
expiration=600
[solvedtele-endpoint]
type=endpoint
transport=transport-udp
context=from-solvedtele
aors=solvedtele-aor
outbound_auth=solvedtele-auth
from_domain=sip.solvedtele.com
disallow=all
allow=ulaw,opus
dtmf_mode=rfc4733
direct_media=no
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
[solvedtele-identify]
type=identify
endpoint=solvedtele-endpoint
match=sip.solvedtele.com
Two lines matter more than they look. direct_media=no keeps the media path through the network so recording, transcription, and agent turn detection all have something to listen to. dtmf_mode=rfc4733 sends digits as RTP events, which is what survives transcoding; see DTMF and media.
Codecs and transcoding
G.711 mu-law, G.729, and Opus are handled at the edge, so you offer what your system prefers and we transcode if the far end needs something else. Offer mu-law first for anything that will be recorded or transcribed: it is uncompressed, and every compression step costs speech recognition accuracy that you cannot get back later.
Opus is the better choice for endpoints on lossy networks because it degrades more gracefully. G.729 saves bandwidth and costs quality, which is a bad trade on a machine-listening path. Jitter buffers on our side are tuned for speech rather than for music on hold.
DTMF and media
Send DTMF as RFC 2833 or RFC 4733 RTP events. In-band audio tones are the usual reason an IVR silently fails to capture a digit, because transcoding distorts the tone enough that detection misses it. SIP INFO is also accepted and converted.
Keep media symmetric. Predictable RTP paths are what make turn detection work for an AI Voice Agent, and they make one-way audio diagnosable instead of mysterious. If you see a call connect with no audio in one direction, start with NAT traversal on your side before opening a ticket; rtp_symmetric and rewrite_contact in the example above fix most of it.
Channels, concurrency, and virtual PRI
Inbound SIP trunks are $23.00 per channel per month, and channel counts are raised by request without a rebuild. A burstable virtual PRI starts at $0.9675 per day, which is the right instrument when a campaign needs channels for a week rather than a year.
Size concurrency against peak simultaneous calls, not against calls per hour. A predictive dialer at a three-to-one ratio needs three times the channels its agent count suggests. Hitting the ceiling returns a 503 rather than degrading quality, which is deliberate: a rejected call is easier to diagnose than a bad one.
Failover and route withdrawal
Every destination has more than one carrier path, chosen on live quality. Paths that begin failing are withdrawn from rotation automatically rather than waiting for someone to notice, and answer-seizure ratio, post-dial delay, and per-carrier quality are visible per route so a bad path can be pulled for your traffic specifically.
On your side, define a failover target per trunk and per number. If your endpoint stops answering, inbound calls move to the next target you named instead of hitting a fast busy. Number-level overrides let you move a single DID without touching anything else on the account.
Reading SIP response codes
- 403 Forbidden. Authentication or authorization on our side. Check the source IP, the From header, and the allowed destination prefixes.
- 404 Not Found. The dialed number does not route. Check digit formatting; send E.164.
- 480 Temporarily Unavailable. The far end is reachable but not answering, or your inbound target is not registered.
- 486 Busy Here. A real busy from the far end, or a concurrency limit on the terminating side.
- 503 Service Unavailable. Usually your own channel ceiling or a velocity limit, not a network failure.
- 603 Decline. The far end rejected the call, frequently an analytics or blocking service reacting to your calling number reputation.
Signaling and media captures are available on request for any call ID. Send the call ID, a timestamp, and the destination to contact@solvedtele.com and you get the capture rather than a description of it.
Numbers and porting
Inventory, DID types, E911, caller identity, and what actually happens between an LOA and a cutover.
Searching and reserving inventory
Search by rate center, state, NPA, prefix, or a pattern for vanity. Reserve holds a number for a short window so a user can finish a signup flow without losing it to another buyer, then buy converts the reservation and assigns the number to a trunk or routing target.
All of it is API-driven, and coverage spans local and toll-free numbers in more than 100 countries. Put the search in your own product and your users never see our name; provisioning becomes a step in your onboarding rather than an email to us.
DID types and what they cost
- Local voice. From $1.10 per month plus a $0.40 one-time charge.
- Local fax. From $1.99 per month.
- Toll-free voice. From $1.50 per month.
- Vanity toll-free. From $1.50 per month plus a $30 one-time reservation.
Inbound minutes are rated separately: $0.009 per minute on local DIDs and $0.027 on toll-free. Unlimited inbound plans are available on select DID types by request. The full card, with footnotes, is on the pricing page.
E911 and address records
Enhanced 911 is $1.50 per DID per month plus a $1.50 one-time charge, and it attaches a dispatchable address to the number so an emergency call reaches the right public safety answering point with a location attached. Provision it before the number carries traffic from a place where a person might dial 911.
Address records have to stay current. If a user moves a desk phone or a softphone to a new site, the record must follow, and that is your workflow to own because we cannot see it. Numbers used only for outbound automated dialing still need a valid address on file.
CNAM, directory listing, and caller identity
A CNAM dip on an inbound call is $0.008 per call and returns the calling name the originating carrier published. Setting the outbound caller ID name on your own numbers is free. A directory listing is $10 one time, and directory assistance calls to 411 are $0.99 each.
Caller name is not the same as caller reputation. Analytics services that label calls as spam make their own judgments from call patterns, and a clean CNAM record does not override them. Attestation and calling behavior are what move that; see recording and compliance.
The porting process
You send a Letter of Authorization and a recent bill. We pull the Customer Service Record from the losing carrier and compare it to the LOA before submitting, which means most rejections happen on our side, quietly, days before a cutover date exists. Once the port is accepted, the losing carrier issues a Firm Order Commitment date.
Cutover windows are chosen around your call volume rather than the losing carrier default. A clean simple local port typically runs seven to ten business days from a valid LOA; toll-free is usually faster. Partial ports move a subset of a block without stranding the rest of the range. Port state is exposed over the API so your own dashboard can show it.
Why ports get rejected
- The account name or service address on the LOA does not match the Customer Service Record, character for character.
- The billing telephone number is wrong, or the requested numbers include the BTN on a partial port.
- A pending order exists on the account at the losing carrier.
- The account has a port-out freeze or a PIN requirement that has not been satisfied.
- The numbers are in a different rate center than the LOA claims.
Send the most recent bill rather than a summary screen. It carries the exact account name, the BTN, and the service address in the form the losing carrier will check against.
Releasing numbers
Releasing a DID stops its monthly charge from the next billing cycle and returns it to inventory. Releases are not reversible once the number leaves your account, so scripted cleanup jobs should confirm the number is idle in CDRs before calling the endpoint.
Porting a number away is a different operation and starts at the gaining carrier, not here. We do not block port-outs; send the request through them and we will respond to the Customer Service Record request.
Programmable routing
The routing engine under AgentTech Dialer and its Lead Marketplace, described as primitives you can drive yourself.
Campaigns, buyers, and publishers
A campaign is the unit a call belongs to. A publisher is the source that produced the call, carrying its own payout terms and its own quality history. A buyer is a destination that can receive the call, carrying its own bid, caps, and acceptance criteria. Most routing logic is a question about which buyer should get this publisher call on this campaign right now.
Keeping the three separate is what makes per-publisher payouts and per-buyer caps possible without writing a rules engine. Every routing decision is recorded on the CDR, so a dispute about which buyer got a call ends with a record.
Real-time bidding
A call can be offered to several buyers at once. Each returns a bid or declines, the winning bid takes the call, and the connection completes inside the setup window callers will tolerate. That budget is short, so buyer endpoints that take seconds to answer a bid request lose calls they would otherwise have won.
Bids can carry conditions. A buyer may bid only for a given state, a given time of day, or a call whose attributes match an accepted profile. Losing bids are recorded too, which is how you tell a buyer that never bids from a buyer that always loses.
Caps, dayparting, and concurrency
Caps limit how many calls a buyer receives per hour, per day, or per month. Dayparting limits when they receive them, in the buyer time zone rather than yours. Concurrency limits how many live calls a buyer can hold at once, which is the control that stops a call center from being handed more calls than it has agents.
When every buyer on a campaign is capped out, the call needs somewhere to go. Configure an overflow target explicitly; the alternative is a caller hearing silence while the engine looks for a home.
Skills and state license routing
Route on any attribute you pass with the call: agent skill, product line, language, or the states a producer is licensed in. License matching is how insurance traffic stays inside the lines, because a call routed to an unlicensed producer is a compliance problem before it is a conversion problem.
Attributes arrive either on the inbound leg as SIP headers or from an API call before the route is requested. Whatever you send is stored with the routing decision, so the reason a call went where it went is reconstructable later.
Queues, hold treatment, and IVR
Queues carry ring strategies, position announcements, estimated wait announcements, and hold treatment. Multi-level IVR trees run under your own brand and your own prompts. None of it exposes our name, which is the point for platform customers reselling this as their own product.
Keep IVR depth shallow on inbound sales traffic. Every additional layer costs abandonment, and the digits have to survive the media path to be useful at all; see DTMF and media.
Duplicate and suppression rules
Duplicate rules reject a caller who has already been routed inside a window you define, per campaign or across the account. This is what keeps a publisher from being paid twice for the same person, and it is the rule most often set too loosely.
Suppression lists block specific numbers outright before a route is attempted. Load your own do-not-call and litigator lists; the check happens before the call is offered to any buyer, so a suppressed number never reaches a bid.
Messaging and 10DLC
Sending, registration, throughput, verification, consent, and why an accepted message is not a delivered message.
Sending and receiving
Long-code and toll-free SMS are $0.0075 to send and $0.0075 to receive. MMS is $0.02 each way. Inbound messages arrive at your webhook endpoint as message.received events; see the event catalog.
A successful send response means we accepted the message for delivery, nothing more. The delivery outcome arrives later as a separate event, which is the distinction that catches most new integrations; see delivery receipts.
Brand and campaign registration
Application-to-person traffic on long codes has to be registered. You register a brand, which identifies the business, then one or more campaigns, which describe what you actually send and how recipients consented to receive it. We prepare and submit the packet as part of onboarding rather than handing you a form.
The campaign description has to match the traffic. A campaign registered for appointment reminders that carries marketing content is the fastest route to filtering, and the filtering is silent: messages are accepted, billed by the sending path, and never delivered.
Throughput tiers and message rate
Your messages-per-second ceiling is a function of your brand vetting score and your campaign type, not a setting we can raise on request. Raising throughput means resubmitting vetting with better supporting information, which we will do with you.
Design for the ceiling. Queue on your side and send at a steady rate rather than bursting, because exceeding the per-second limit produces carrier-side throttling that looks like random delivery failure rather than a clean rejection.
Toll-free verification
Toll-free numbers used for messaging go through a separate verification process. Unverified toll-free traffic is heavily filtered, so verification is not optional if delivery matters. We prepare and submit the verification packet, including the opt-in flow evidence, which is the part that gets packets returned.
Have a real opt-in screenshot ready: the form, the checkbox, and the disclosure text as a recipient sees them. A description of the opt-in is not evidence of the opt-in.
Opt-out, STOP, and HELP
STOP, UNSTOP, START, and HELP keywords are handled at the number level and the resulting consent state is exposed over the API. Once a recipient is in a STOP state on a number, further messages to them from that number are blocked before they reach a carrier.
Consent state is per number, not per account, which matters when you rotate sending numbers. Read the state before you send rather than discovering it in a delivery receipt, and mirror it into your own system so your application does not keep queueing messages that will never leave.
Delivery receipts
A delivery receipt is the carrier answer about what happened to the message. It arrives as a message.delivered event, or as a failure with a reason code, and it can arrive seconds or minutes after the send. Treat the send response as queued and the receipt as the outcome.
If sends succeed and receipts never arrive, the problem is usually your webhook endpoint rather than the message path; see debugging deliveries. If receipts arrive as failures, the reason code distinguishes an invalid number from carrier filtering from a handset that is out of coverage.
MMS
MMS is $0.02 each way and carries images, audio, video, and longer text. Attachment size limits are set by the receiving carrier rather than by us, and the practical ceiling is lower than the documented one, so compress before sending if delivery rate matters more than fidelity.
Group messaging behaves differently across carriers and handsets. If your use case needs guaranteed one-to-one delivery semantics, send individual messages rather than a group thread.
Recording and transcription
Capture in the network, storage you control, and the analysis layer on top of it.
Turning recording on
Recording is $0.0025 per minute each way and runs in the network rather than in your application, so capture does not depend on your service staying up. Enable it for a whole account, for a sub-account, for a single campaign, or per call at origination time.
Consent law varies by state and by call type, and it is your obligation, not ours. Two-party consent states require an announcement or an explicit agreement before recording begins; build the announcement into the call flow rather than into a policy document.
Storage, retention, and encryption
Media and storage encryption are on by default at no additional charge. Retention windows are set per account, so media and the records that point at it age out on the schedule your industry requires rather than on ours.
Set retention deliberately in both directions. Too short and you cannot answer a traceback or a dispute; too long and you are holding regulated audio you no longer have a reason to keep. See security for the controls around access.
Access, playback, and signed URLs
List recordings by call, by date range, or by sub-account over the API, then either download the media or request a time-limited signed URL. Signed URLs are how platform customers put playback into their own front end without proxying audio through their servers or exposing a permanent link.
Deleting a recording removes the media. The CDR that references it stays, because the billing record and the audio have different retention requirements.
Requesting a transcription
Transcription is $0.05 per minute and runs against the recording. Request it per recording or set it to run automatically for a scope, and the result arrives as a transcription.available event with speaker labels and timestamps.
Audio quality sets the ceiling on accuracy. Recording an uncompressed mu-law path gives noticeably better output than transcribing audio that has already been through G.729; see codecs and transcoding.
Redaction
Redaction of personally identifiable information and payment data in transcripts is included at no additional charge. It removes the spans it identifies from the transcript text so the stored artifact does not carry a card number or an identifier that nobody needed to keep.
Redaction is a control, not a guarantee. Treat transcripts as sensitive regardless, apply the same access rules you apply to the audio, and keep the retention window short enough that an unredacted miss has a bounded life.
Summary and sentiment
Call summary is $0.005 per minute and sentiment is $0.004 per minute, both computed from the transcript. Voicemail transcription on inbound calls is $0.05 per minute.
Summaries are useful for handoff and for search across a large call set. Sentiment is a trend signal across many calls rather than a verdict on one, and it should never be the sole input to a decision about an individual agent or an individual conversation.
Webhooks and events
How events reach you, what a payload looks like, and how to verify that it came from us.
Registering an endpoint
Register an HTTPS endpoint and subscribe it to the event types you want. You can register several endpoints and give each a different subscription, which is the clean way to separate a billing consumer from a call-flow consumer without one team breaking the other.
Return a 2xx quickly. Do the work afterward, out of band. An endpoint that does its processing inline and answers in eight seconds will be retried while it is still working, and you will process the same event twice.
Payload shape
Every delivery is a POST with a JSON body. The envelope is identical across event types: an event id, a type, a creation timestamp, the account, and a data object whose shape depends on the type. A call.completed delivery looks like this.
POST /hooks/solvedtele HTTP/1.1
Content-Type: application/json
X-Solvedtele-Event: call.completed
X-Solvedtele-Delivery: whd_01J9K2M4R7T0
X-Solvedtele-Signature: t=1758182527,v1=9c4f2b7e1d05a3...
{
"id": "evt_01J9K2M4R7T0",
"type": "call.completed",
"created_at": "2026-09-18T14:22:07Z",
"account_id": "acct_8f21c4",
"data": {
"call_id": "call_01J9K2M1Q8ZB",
"direction": "outbound",
"from": "+18665551212",
"to": "+14045550143",
"started_at": "2026-09-18T14:19:46Z",
"answered_at": "2026-09-18T14:19:58Z",
"ended_at": "2026-09-18T14:22:07Z",
"billable_seconds": 129,
"sip_response": 200,
"hangup_cause": "normal_clearing",
"attestation": "A",
"route": "quality",
"sub_account_id": "sub_2201",
"recording_id": "rec_01J9K2M9WD4C",
"applied_rate": "0.0100",
"currency": "USD"
}
}
Fields are added over time and are never removed without notice, so parse defensively and ignore keys you do not recognize.
Event catalog
call.initiatedandcall.answeredfor live call progress.call.completedwhen the leg ends, carrying duration, cause, and the applied rate.recording.availablewhen media is stored and fetchable.transcription.availablewhen text, speaker labels, and timestamps are ready.message.receivedfor inbound SMS and MMS.message.deliveredfor carrier delivery receipts, including failures with a reason code.number.portedwhen a port completes and the number is live on our network.bid.wonwhen a buyer takes a call in real-time bidding.
The same catalog is listed with its use in the API reference.
Signature verification
Each delivery carries an X-Solvedtele-Signature header holding a timestamp and an HMAC over the timestamp and the raw request body, keyed with your endpoint signing secret. Compute the same HMAC over the bytes you received and compare in constant time.
Verify against the raw body, before any JSON parsing or re-serialization, because a reordered key changes the bytes and breaks the comparison. Reject deliveries whose timestamp is outside a tolerance window, typically five minutes, so a captured request cannot be replayed at you later.
Retries and ordering
Non-2xx responses and timeouts are retried with exponential backoff. That makes at-least-once delivery the contract, so consumers must be idempotent: key on the event id and discard one you have already processed.
Ordering is not guaranteed. A recording.available event can arrive before the call.completed event for the same call. Reconcile on the call id and the timestamps in the payload rather than on arrival order.
Debugging deliveries
Start by confirming the endpoint is reachable from the public internet over TLS with a valid certificate chain, including intermediates. A certificate that a browser accepts because it caches an intermediate will still fail a server-side client.
Then check the response code and the response time in your own access log. The three recurring causes of missing events are a firewall rule, an endpoint that answers slower than the delivery timeout, and a signature check comparing against a re-serialized body.
Billing and CDRs
How usage is rated, what a call detail record carries, and how to bill your own customers from it.
How rating works
Rating is per leg. A call bridged between two parties produces a record for each leg, each with its own direction, route, carrier, duration, and applied rate. Outbound local starts at $0.005 per minute and varies by destination; inbound local is $0.009 and inbound toll-free is $0.027. Internal traffic that stays on our network is free in both directions.
Add-on services rate on the same clock: recording at $0.0025 per minute, transcription at $0.05, summary at $0.005, sentiment at $0.004, and AI Voice Agents at $0.10 per minute of talk time. Encryption and transcript redaction are included at no charge.
Reading a CDR
Each record carries the call id, the leg, direction, from and to in E.164, the start, answer, and end timestamps, billable seconds, the SIP response and hangup cause, the route and carrier that carried it, the STIR/SHAKEN attestation, the sub-account, any related recording id, and the rate that actually applied.
The applied rate being on the record is the point. You are reading what you were charged rather than inferring it from a monthly total, which is the difference between reconciling an invoice and arguing about one.
Sub-account rollups
Usage is split by sub-account so a platform can invoice its own customers from our records. Each sub-account carries its own numbers, trunks, and routing, and rolls its usage up to the parent for settlement.
Set your tenant identifier as the sub-account reference at creation time rather than mapping it later. Every CDR then carries your identifier, and your billing job never has to join against a lookup table that can drift.
Scheduled exports
CDRs can be pulled over the API or pushed on a schedule to Amazon S3, Google Cloud Storage, or an HTTPS endpoint you name, hourly or daily. Pull suits ad hoc questions; push suits a warehouse that needs yesterday loaded before the morning reports run.
Exports are written as complete files per window, so a late-arriving record for a long call appears in the window its leg closed in. Load on the window rather than on the file timestamp and the arithmetic stays correct.
Spend caps and velocity limits
Spend caps stop an account or sub-account when usage passes a threshold you set. Velocity limits cap calls per minute to a destination or a prefix. Destination allowlists restrict which country codes and prefixes can be dialed at all.
Set all three before go-live, not after an incident. They are the difference between a compromised credential costing a small number and costing a large one; see security for the full set of toll fraud controls.
Reconciling an invoice
Take the invoice line, filter CDRs to the same period and the same service, and sum billable seconds against the applied rate. Differences almost always come from rounding at the leg level or from a period boundary, and both are visible in the records.
If a line still does not reconcile, send us the invoice line and the CDR query you ran. We would rather look at your arithmetic than explain ours.
AI Voice Agents
Autonomous voice agents on rails built for machine turn-taking, billed at $0.10 per minute of talk time.
Creating an agent
An agent is a configuration: the instructions that define its task, the voice it speaks with, the tools it is allowed to call, and the conditions under which it hands off to a human. Create it once over the API and reference it by id when you start sessions.
Write the handoff conditions before you write the script. An agent that cannot recognize when it is out of its depth produces the worst calls on the platform, and the transfer path is what turns that from a failure into a routed call.
Starting a session
A session binds an agent to a call. Start one outbound, in which case the network places the call and connects the agent when it is answered, or attach one to an inbound call arriving on a DID or out of a queue. Either way the session gets a session id that ties it to the CDR and to any recording.
Sessions can be listed and inspected after the fact, so a conversation that went wrong is reviewable with the same tooling as a human call.
The latency budget
A natural turn leaves a few hundred milliseconds between a person finishing and a reply starting. That budget has to cover speech recognition, inference, speech synthesis, and the network in both directions, which is why the media path is treated as a product rather than as plumbing.
Protect the budget where you control it. Keep tool calls fast or make them asynchronous, prefer uncompressed audio in, and keep prompts short enough that the first token is not waiting on a long context; see codecs and transcoding.
Turn detection and barge-in
Turn detection decides when the caller has finished speaking. Too eager and the agent interrupts; too patient and it feels slow. Barge-in lets a caller cut the agent off mid-sentence, which people do constantly and which an agent that ignores it will lose the call over.
Both depend on a clean, symmetric media path. Asymmetric RTP and aggressive comfort noise are the usual causes of an agent that talks over people; see DTMF and media.
Warm transfer to a human
An agent can transfer to a queue, to a specific target, or into the routing engine to be treated like any other call, including real-time bidding. The conversation context travels with the transfer so the person who picks up is not starting from nothing.
Route the transfer through the same skills and license rules a human-originated call would use. An agent handing a licensed-product call to an unlicensed producer is the same compliance problem it would be without the agent; see skills and state license routing.
What $0.10 per minute covers
The agent rate is $0.10 per minute of talk time and covers the managed agent itself. Standard PSTN rates apply to the underlying connectivity when you use the network without the agent product, and recording, transcription, and the analysis services rate separately at their published rates.
You do not have to use agents to use the network. Connectivity, numbers, messaging, routing, PBX, and recording all stand on their own; the agent is an optional product on top. Volume and platform pricing is quoted.
FAQs
Documentation questions
Why is all of the documentation on one page?
Because a network is one system and splitting it into hundreds of article pages makes the connections harder to see, not easier. Everything is on this page, the contents at the top jumps to any section, and your browser find function works across the whole document.
Are the hostnames in the examples real endpoints?
No. The examples use sip.solvedtele.com and api.solvedtele.com as placeholders to keep the shape readable. Your trunk hostname, trunk credentials, and API bearer token are issued during onboarding and may differ.
Do I need the API to use the network?
No. Plenty of accounts point an existing PBX or softswitch at a SIP trunk and never make an API call. The API is how platforms automate provisioning, routing, and reporting inside their own product; it is not a prerequisite for carrying traffic.
Is there a sandbox?
Yes. Ask for a sandbox token during onboarding. It accepts the same requests, returns the same object shapes, and delivers the same webhooks, with numbers drawn from a test pool and calls terminating to a test answering service rather than the PSTN.
Something here is wrong or missing. Who do I tell?
Email contact@solvedtele.com. Documentation corrections go to the same people who run the routes, so a wrong configuration example gets fixed by someone who has run it.
Something else? Contact us
Ready to connect something?
Onboarding issues the trunk, the credentials, and a sandbox token in the same conversation.