VoIP.info Diagnostic

Asterisk PJSIP 420 Bad Extension: trace the required option tag

Identify the rejecting PJSIP leg, Unsupported token and loaded endpoint policy before changing 100rel or stripping extension requirements.

Reviewed 2026-09-28RFC 3261, RFC 3262 and current Asterisk res_pjsip and debugging documentation reviewed September 28, 2026; no PBX, endpoint, proxy, 100rel policy, PRACK exchange or live transaction testedAdvancedDocumentation based · not lab tested

Bind the 420 to one request and PJSIP leg

Record the timestamp and timezone, user-visible symptom, request method and Request-URI, PJSIP endpoint or trunk, Call-ID, CSeq, top Via branch, every Require and Proxy-Require value, responder and every Unsupported token. Determine whether Asterisk generated 420 for an inbound request or received it on an outbound leg. Do not assign the response to a handset, Asterisk or a provider from a display label alone.

With authorization, use pjsip set logger on only for one bounded reproduction, then disable it and protect identities, authentication material, numbers and message bodies. Asterisk can be a back-to-back user agent, so correlate its inbound and outbound channels without assuming a single end-to-end transaction.

Find the exact required token and its owner

Compare Unsupported with the original Require and Proxy-Require fields byte-for-byte and look up the token in the current IANA registry. Establish which endpoint, provisioning template, SBC, application or dialplan integration inserted the requirement. Supported is an advertisement and must not be treated as proof that the peer required the feature.

If the 420 omits Unsupported or names a token that was not required on the captured leg, retain that discrepancy as interoperability evidence. Do not solve it by deleting all extension headers or by accepting arbitrary vendor tokens. Prove that a retry without the named requirement preserves the intended service semantics before allowing one.

Inspect Asterisk 100rel policy when that token is named

Current res_pjsip documentation gives the endpoint 100rel option four behaviors: no, required, peer_supported and yes. As a UAS, no rejects an incoming request that requires 100rel with 420. required can reject an incoming request that did not advertise 100rel with 421 and places 100rel in Require on outgoing requests. The other modes advertise or use reliable provisional responses under their documented conditions.

Inspect the loaded endpoint object and generated-configuration owner, not only a source file. In FreePBX, retain module and GUI ownership instead of making a durable edit to generated PJSIP configuration. Asterisk-version documentation and the actually loaded release must match before changing a value.

Follow reliable provisional responses separately

RFC 3262 uses the 100rel option tag for reliable provisional responses and PRACK. If 100rel is the rejected requirement, preserve whether the call needs reliable 18x handling, whether the peer advertised support, every RSeq and RAck value, PRACK timing and the final INVITE response. An early-media symptom can coexist with this negotiation but does not turn 100rel into a media-format setting.

Keep the 420 transaction separate from 421, 408, 481, 488 and missing or mismatched PRACK evidence. Do not change codecs, RTP addressing, session timers or NAT settings unless the corresponding signaling or media evidence identifies those independent owners.

Correct narrowly and retest both capability paths

Correct only the demonstrated owner: the requesting peer's unnecessary requirement, Asterisk's endpoint-specific extension policy, or an intermediary that cannot support a requirement it is expected to process. Preserve the prior value and rollback trigger. Do not weaken a security, recording, resource-priority or other semantic requirement merely to remove the status.

Repeat one authorized request, confirm the expected Require, Supported, Proxy-Require and Unsupported fields, and follow provisional responses, PRACK where applicable, final response and user-visible outcome. Test the fallback or explicit failure expected when the extension is genuinely mandatory. No PBX, endpoint, proxy, option tag, 100rel policy, provisional response, PRACK exchange, media path or live call was tested for this guide.

Asterisk CLI — bounded 420 evidence
pjsip show endpoint <endpoint>
pjsip set logger on
# Reproduce one authorized request and capture Require, Proxy-Require and Unsupported.
pjsip set logger off

Sources & applicability

Primary references for the technical details above. Operational examples and planning checklists are VoIP.info editorial guidance.

Examples require adaptation to your topology. No live PBX or hardware testing is claimed.