SIP codes

What the SIP result of a dial attempt means in plain language, how the platform turns it into an outcome, and what to do about each one.

After this page you can read any dial attempt on a call's waterfall, say whether it was your configuration or the buyer's phone system, and give that buyer's engineer the number they will ask for. A SIP response code is the telephone network's equivalent of an HTTP status: the answer the buyer's side gave when we rang it.

You never have to read one to use the platform. Every attempt is written in English first — "BlueSky Legal — Intake did not answer" — with the code in brackets after it. The code is there for the conversation that starts when the buyer says their phones were working fine.

One attempt, as the waterfall stores it
{
  "step": "result",
  "attemptNo": 1,
  "targetName": "BlueSky Legal — Intake",
  "outcome": "no_answer",
  "sipCode": 480,
  "sentence": "BlueSky Legal — Intake did not answer (SIP 480 Temporarily Unavailable)."
}

The outcome comes first

Before a code is printed, the platform reduces the attempt to one word. That word is what reports, filters and the call.failover event use; the code is detail beside it. The same word can come from several codes, because "486" and "480" are the same missed call to a person and two different faults to whoever has to fix the trunk.

OutcomeThe console saysReached from
answeredAnsweredThe buyer picked up. This is a connected call.
busyBusySIP 486 or 600, or a carrier hangup cause of user_busy.
no_answerNo answerSIP 408, 480 or 487, or a cause of timeout, no_answer, no_user_response, originator_cancel or time_limit.
rejectedDeclinedSIP 603 or 403, or a cause of call_rejected. Also normal_clearing before an answer — the far end hung up rather than picking up.
failedFailedAnything else, including 404, 484 and 604, which read "is not a working destination".
capacityNo line freeThe target had no free slot when the router reached it. No call was placed, so there is no SIP code.
cancelled, abandonedCaller hung upThe caller left while a target was ringing. Not the buyer's fault, and it is why a short ring time makes a target look worse than it is.
skippedSkippedThe entry was passed over before dialling — see reason codes.
sipCode is null whenever the carrier gave no SIP answer, and on every outcome that never reached the phone network at all.

The codes you will actually see

These fifteen are the ones the platform names in a sentence. Anything else prints as a bare number and is read by its family.

CodeNameIn plain wordsWhat to do
403ForbiddenThe destination refused the call outright. Usually an allowlist on the buyer's side that does not include our network or the caller ID we present.Ask the buyer to allow the call. The waterfall shows the number we dialled from and to.
404Not FoundThe number or SIP address does not exist at the destination.A typo in the target's destination, or a number the buyer has given up. Fix it and run Test; see Testing a target.
408Request TimeoutThe destination's network did not respond at all.Their side is down or unreachable. The call failed over; if every attempt reads this, check the destination is not behind something that drops unknown traffic.
480Temporarily UnavailableThe destination exists but nobody is available — a phone that is off, a queue with nobody in it, an out-of-hours setting on their side.Normal outside the target's hours. Inside them, either the hours are wrong or the buyer is short-staffed.
484Address IncompleteThe destination was dialled with fewer digits than it expects.Almost always a destination saved without its country code. Store it in E.164.
486Busy HereThe destination is busy.Lower the target's concurrency cap so calls move on sooner, or agree more lines with the buyer. A busy signal you pay ring time for is a cap set too high.
487Request TerminatedThe attempt was cancelled before it was answered — most often the caller hung up while it rang, or the ring time ran out and failover moved on.Nothing, if occasional. Constant 487 means the target is ringing longer than your ring time allows.
488Not Acceptable HereThe two sides could not agree how to carry the audio.A codec mismatch on a SIP destination. The buyer's engineer needs this one; the number is the whole message.
500Server Internal ErrorThe destination's phone system failed.Theirs to fix. Three in a row raise a target.down event so somebody looks; the target keeps being dialled until their side asks us to stop.
502Bad GatewaySomething between us and the destination failed.As above. If it clusters on one buyer, it is their carrier.
503Service UnavailableThe destination's phone system is overloaded or in maintenance.The call failed over. A 503 that asks us to retry later suppresses the target until then — see below.
504Server Time-outThe destination's system accepted the call and then did not finish setting it up.Theirs. Worth quoting with a timestamp.
600Busy EverywhereBusy, and the destination is saying so for every line it has.Treated exactly as 486.
603DeclineThe destination actively rejected the call — a person or a system pressed reject.Ask the buyer why. This is a decision at their end, not a fault.
604Does Not Exist AnywhereThe number does not exist anywhere on the network.As 404, but final. Correct the destination.
Four more are named in a call's waterfall summary without appearing on an attempt's own sentence: 401 and 407 — the far end asked for credentials the platform does not hold, which is a SIP destination saved without its username and password — and 410, that number is gone. 200 is simply an answer.

The families

A code the platform does not name still tells you which half of the call went wrong, by its first digit.

RangeMeansWhat the call does
1xxIn progress — trying, ringing.Not a result. The attempt is still running and nothing is written yet.
2xxAnswered.The call is connected. Talk time and the duration threshold start here.
3xxThe destination has moved.Treated as a failure. A redirect to an address you did not configure is never followed.
4xxThis request failed at this destination.The attempt ends and the call moves on.
5xxThe destination's own server failed.The attempt ends, and it counts towards the target's health.
6xxRefused everywhere — nobody at the destination will take it.The attempt ends and the call moves on.
Only a code of 300 or above is recorded. A carrier that hangs up with no SIP answer at all leaves sipCode null and the sentence reads from the hangup cause instead.

What happens after a failed attempt

Every result other than an answer does the same four things, whatever the code was:

  1. The attempt is closed and written to the waterfall with its outcome, its code and its sentence.
  2. The target's and the buyer's held slots are given back, so the next caller can use them immediately.
  3. The call moves to the next entry in the routing plan — as long as the campaign's failover budget has time left. When the plan or the budget is spent, the call ends with all_targets_failed.
  4. A call.failover event fires, naming the target that failed and the one being tried next.
The same attempt as an event
{
  "event": "call.failover",
  "data": {
    "ref": "CA-482137",
    "targetName": "BlueSky Legal — Intake",
    "attemptNo": 1,
    "reason": "no_answer",
    "sipCode": 480,
    "sentence": "BlueSky Legal — Intake did not answer (SIP 480 Temporarily Unavailable).",
    "nextTargetName": "Acme Health — Dallas floor"
  }
}

When a target is stood down

Two different mechanisms follow repeated failures, and they are easy to confuse because both end with a target not being dialled.

SuppressionDown
Triggered byA 503 that asks us to retry after a given time.Three failed dials in a row on the same destination.
What happensThe target is skipped until that time passes.A target.down event fires once, so somebody can look.
The skip reasonsuppressedNone of its own — the target keeps being dialled.
How it clearsThe clock. Nothing to switch back on.A call that connects resets the counter to zero.

The suppressed reason code tells you the first has happened, and the stored sentence names the minute it is retried at. Neither changes the routing plan, and neither needs a person.

Worked example: reading a buyer's bad morning

BlueSky Legal say their intake line was up all morning and you are sending them nothing. Open one of the calls and read its attempts in order:

  • Attempt 1 — BlueSky Legal — Intake, no_answer (SIP 480). Their system accepted the invitation and then had nobody to give it to. The line is up; the queue is empty. That is a staffing answer, not a network one.
  • Attempt 2 — Acme Health — Dallas floor, busy (SIP 486). A genuine busy. Their concurrency cap on your side says six; if they are refusing at six, the cap is right and they need more lines.
  • Attempt 3 — Acme Health — Overflow, answered. The call connected and the caller is with a buyer.

So the call sold, and the report that matters is not this one call but how often attempt 1 reads 480. Group a report by target over the morning and compare connect rates: a target whose calls are three-quarters 480 inside its own hours is a target whose hours are a fiction. See Report builder.

Next steps