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.
{
"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.
| Outcome | The console says | Reached from |
|---|---|---|
answered | Answered | The buyer picked up. This is a connected call. |
busy | Busy | SIP 486 or 600, or a carrier hangup cause of user_busy. |
no_answer | No answer | SIP 408, 480 or 487, or a cause of timeout, no_answer, no_user_response, originator_cancel or time_limit. |
rejected | Declined | SIP 603 or 403, or a cause of call_rejected. Also normal_clearing before an answer — the far end hung up rather than picking up. |
failed | Failed | Anything else, including 404, 484 and 604, which read "is not a working destination". |
capacity | No line free | The target had no free slot when the router reached it. No call was placed, so there is no SIP code. |
cancelled, abandoned | Caller hung up | The 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. |
skipped | Skipped | The 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.
| Code | Name | In plain words | What to do |
|---|---|---|---|
403 | Forbidden | The 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. |
404 | Not Found | The 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. |
408 | Request Timeout | The 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. |
480 | Temporarily Unavailable | The 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. |
484 | Address Incomplete | The destination was dialled with fewer digits than it expects. | Almost always a destination saved without its country code. Store it in E.164. |
486 | Busy Here | The 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. |
487 | Request Terminated | The 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. |
488 | Not Acceptable Here | The 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. |
500 | Server Internal Error | The 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. |
502 | Bad Gateway | Something between us and the destination failed. | As above. If it clusters on one buyer, it is their carrier. |
503 | Service Unavailable | The 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. |
504 | Server Time-out | The destination's system accepted the call and then did not finish setting it up. | Theirs. Worth quoting with a timestamp. |
600 | Busy Everywhere | Busy, and the destination is saying so for every line it has. | Treated exactly as 486. |
603 | Decline | The 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. |
604 | Does Not Exist Anywhere | The number does not exist anywhere on the network. | As 404, but final. Correct the destination. |
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.
| Range | Means | What the call does |
|---|---|---|
1xx | In progress — trying, ringing. | Not a result. The attempt is still running and nothing is written yet. |
2xx | Answered. | The call is connected. Talk time and the duration threshold start here. |
3xx | The destination has moved. | Treated as a failure. A redirect to an address you did not configure is never followed. |
4xx | This request failed at this destination. | The attempt ends and the call moves on. |
5xx | The destination's own server failed. | The attempt ends, and it counts towards the target's health. |
6xx | Refused everywhere — nobody at the destination will take it. | The attempt ends and the call moves on. |
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:
- The attempt is closed and written to the waterfall with its outcome, its code and its sentence.
- The target's and the buyer's held slots are given back, so the next caller can use them immediately.
- 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. - A
call.failoverevent fires, naming the target that failed and the one being tried next.
{
"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.
| Suppression | Down | |
|---|---|---|
| Triggered by | A 503 that asks us to retry after a given time. | Three failed dials in a row on the same destination. |
| What happens | The target is skipped until that time passes. | A target.down event fires once, so somebody can look. |
| The skip reason | suppressed | None of its own — the target keeps being dialled. |
| How it clears | The 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.
