PJSIP_INHERITABLE_HEADER()

Since 20.19.0, 22.9.0, 23.3.0 Functions Found this useful? Upvote it. ×

Adds, updates or removes the specified [[term:sip]] header from a [[term:pjsip]] or non-PJSIP [[term:channel|channel]] to be inherited to an outbound PJSIP channel.

Last reviewed 2026-08-22

PJSIP_INHERITABLE_HEADER(action,name[,number])
Description

PJSIP_INHERITABLE_HEADER allows you to write specific SIP headers on a calling channel to be inherited by an outbound PJSIP channel.

Examples:

Add an inheritable X-Myheader header with the value of myvalue
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader)=myvalue)
Add an inheritable X-Myheader header with an empty value
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader)=)
Add an inheritable X-MyHeader that will be inherited by child channel
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader)=myvalue)
Update the value of the inheritable header named X-Myheader to newvalue
; 'X-Myheader' must already exist or the call will fail.
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(update,X-MyHeader)=newvalue)
Remove all inheritable headers whose names exactly match X-MyHeader
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(remove,X-MyHeader)=)
Remove all inheritable headers that begin with X-My
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(remove,X-My*)=)

Note

If you call PJSIP_INHERITABLE_HEADER in a normal dialplanThe core call-routing configuration of Asterisk, written mostly in extensions.conf as contexts, extensions, and priorities that decide how every call is handled. Full definition → contextA named section of the dialplan that groups extensions. Calls enter a specific context and can only reach extensions visible from it, making contexts the basic unit of call routing and security. you'll be operating on the caller's channel which will then be inherited to the callee's (outgoing) channel. Inherited headers can be updated or removed via PJSIP_INHERITABLE_HEADER in a pre-dial handler. Headers added via PJSIP_INHERITABLE_HEADER are separate from headers added via PJSIP_HEADER. A header added via PJSIP_INHERITABLE_HEADER can only be or removed modified by PJSIP_INHERITABLE_HEADER. A header added via PJSIP_HEADER can only be modified or removed by PJSIP_HEADER.

Set and modify headers on callee channel
[handler]
exten => modheader,1,Set(PJSIP_INHERITABLE_HEADER(update,X-MyHeader)=myvalue)
    same => n,Set(PJSIP_INHERITABLE_HEADER(update,X-MyHeader2)=myvalueX)
    same => n,Set(PJSIP_INHERITABLE_HEADER(remove,X-MyHeader2)=)

[somecontext]
exten => 1,1,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader1)=myvalue1)
    same => n,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader2)=myvalue2)
    same => n,Set(PJSIP_INHERITABLE_HEADER(add,X-MyHeader3)=myvalue3)
    same => n,Dial(PJSIP/${EXTEN},,b(handler^modheader^1))
Arguments
  • action required
    • add - Adds a new header name to this channel.
    • update - Updates instance number of header name to a new value. The header must already exist.
    • remove - Removes all instances of previously added headers whose names match name. A * may be appended to name to remove all headers beginning with name. name may be set to a single * to clear all previously added headers. In all cases, the number of headers actually removed is returned.
  • name required - The name of the header.
  • number - If there's more than 1 header with the same name, this specifies which header to read or update. If not specified, defaults to 1 meaning the first matching header. Not valid for add or remove.
User Notes

Know a tip or gotcha for this topic? Share it below and help others.

Contribute a note

Share a tip, gotcha, or practical example. Keep it under 2000 characters. No questions (use the Asterisk community forums for support). Wrap code in backticks.

Moderated before publishing. Email never shown.
Functions
ABS() AES_DECRYPT() AES_ENCRYPT() AGC() AGENT() AMI_CLIENT() ARRAY() AST_CONFIG() AST_SORCERY() BASE64_DECODE() BASE64_ENCODE() BASENAME() BLACKLIST() CALENDAR_BUSY() CALENDAR_EVENT() CALENDAR_QUERY() CALENDAR_QUERY_RESULT() CALENDAR_WRITE() CALLCOMPLETION() CALLERID() CALLERPRES() CDR() CDR_PROP() CHANNEL() CHANNELS() CHANNEL_EXISTS() CHECKSIPDOMAIN() CONFBRIDGE() CONFBRIDGE_CHANNELS() CONFBRIDGE_INFO() CONNECTEDLINE() CSV_QUOTE() CURL() CURLOPT() CUT() DAHDI_CHANNEL() DB() DB_DELETE() DB_EXISTS() DB_KEYCOUNT() DB_KEYS() DEC() DELETE() DENOISE() DEVICE_STATE() DIALGROUP() DIALPLAN_EXISTS() DIGIT_SUM() DIRNAME() DUNDILOOKUP() DUNDIQUERY() DUNDIRESULT() ENUMLOOKUP() ENUMQUERY() ENUMRESULT() ENV() EVAL() EVAL_EXTEN() EVAL_SUB() EXCEPTION() EXISTS() EXPORT() EXTENSION_STATE() FAXOPT() FEATURE() FEATUREMAP() FIELDNUM() FIELDQTY() FILE() FILE_COUNT_LINE() FILE_FORMAT() FILTER() FRAME_DROP() FRAME_TRACE() GEOLOC_PROFILE() GLOBAL() GLOBAL_DELETE() GLOBAL_EXISTS() GROUP() GROUP_COUNT() GROUP_LIST() GROUP_MATCH_COUNT() HANGUPCAUSE() HANGUPCAUSE_KEYS() HASH() HASHKEYS() HINT() HOLD_INTERCEPT() IAXPEER() IAXVAR() ICONV() IF() IFMODULE() IFTIME() IMPORT() INC() ISNULL() JABBER_RECEIVE() JABBER_STATUS() JITTERBUFFER() JSON_DECODE() KEYPADHASH() LEN() LISTFILTER() LOCAL() LOCAL_PEEK() LOCK() LOG_GROUP() LTRIM() MAILBOX_EXISTS() MASTER_CHANNEL() MATH() MAX() MD5() MEETME_INFO() MESSAGE() MESSAGE_DATA() MIN() MINIVMACCOUNT() MINIVMCOUNTER() MIXMONITOR() MUTEAUDIO() ODBC() ODBC_FETCH() PARK_GET_CHANNEL() PASSTHRU() PERIODIC_HOOK() PITCH_SHIFT() PJSIP_AOR() PJSIP_CONTACT() PJSIP_DIAL_CONTACTS() PJSIP_DTMF_MODE() PJSIP_ENDPOINT() PJSIP_HEADER() PJSIP_HEADERS() PJSIP_HEADER_PARAM() PJSIP_INHERITABLE_HEADER() PJSIP_MEDIA_OFFER() PJSIP_MOH_PASSTHROUGH() PJSIP_PARSE_URI() PJSIP_PARSE_URI_FROM() PJSIP_RESPONSE_HEADER() PJSIP_RESPONSE_HEADERS() PJSIP_SEND_SESSION_REFRESH() PJSIP_TRANSFER_HANDLING() POLARITY() POP() PP_EACH_EXTENSION() PP_EACH_USER() PRESENCE_STATE() PUSH() QUEUE_EXISTS() QUEUE_GET_CHANNEL() QUEUE_MEMBER() QUEUE_MEMBER_COUNT() QUEUE_MEMBER_LIST() QUEUE_MEMBER_PENALTY() QUEUE_VARIABLES() QUEUE_WAITING_COUNT() QUOTE() RAND() REALTIME() REALTIME_DESTROY() REALTIME_FIELD() REALTIME_HASH() REALTIME_STORE() RECORDING_INFO() REDIRECTING() REGEX() REPLACE() RTRIM() SAYFILES() SCRAMBLE() SET() SHA1() SHARED() SHELL() SHIFT() SIPPEER() SIP_HEADER() SIP_HEADERS() SMDI_MSG() SMDI_MSG_RETRIEVE() SORT() SPEECH() SPEECH_ENGINE() SPEECH_GRAMMAR() SPEECH_RESULTS_TYPE() SPEECH_SCORE() SPEECH_TEXT() SPRINTF() SQL_ESC() SQL_ESC_BACKSLASHES() SRVQUERY() SRVRESULT() STACK_PEEK() STAT() STIR_SHAKEN() STIR_SHAKEN_ATTESTATION() STRBETWEEN() STRFTIME() STRPTIME() STRREPLACE() SYSINFO() TALK_DETECT() TESTTIME() TIMEOUT() TOLOWER() TONE_DETECT() TOUPPER() TRIM() TRYLOCK() TXTCIDNAME() UNLOCK() UNSHIFT() URIDECODE() URIENCODE() UUID() VALID_EXTEN() VARIABLE_EXISTS() VERSION() VMCOUNT() VM_INFO() VOLUME()
Functions
ABS() AES_DECRYPT() AES_ENCRYPT() AGC() AGENT() AMI_CLIENT() ARRAY() AST_CONFIG() AST_SORCERY() BASE64_DECODE() BASE64_ENCODE() BASENAME() BLACKLIST() CALENDAR_BUSY() CALENDAR_EVENT() CALENDAR_QUERY() CALENDAR_QUERY_RESULT() CALENDAR_WRITE() CALLCOMPLETION() CALLERID() CALLERPRES() CDR() CDR_PROP() CHANNEL() CHANNELS() CHANNEL_EXISTS() CHECKSIPDOMAIN() CONFBRIDGE() CONFBRIDGE_CHANNELS() CONFBRIDGE_INFO() CONNECTEDLINE() CSV_QUOTE() CURL() CURLOPT() CUT() DAHDI_CHANNEL() DB() DB_DELETE() DB_EXISTS() DB_KEYCOUNT() DB_KEYS() DEC() DELETE() DENOISE() DEVICE_STATE() DIALGROUP() DIALPLAN_EXISTS() DIGIT_SUM() DIRNAME() DUNDILOOKUP() DUNDIQUERY() DUNDIRESULT() ENUMLOOKUP() ENUMQUERY() ENUMRESULT() ENV() EVAL() EVAL_EXTEN() EVAL_SUB() EXCEPTION() EXISTS() EXPORT() EXTENSION_STATE() FAXOPT() FEATURE() FEATUREMAP() FIELDNUM() FIELDQTY() FILE() FILE_COUNT_LINE() FILE_FORMAT() FILTER() FRAME_DROP() FRAME_TRACE() GEOLOC_PROFILE() GLOBAL() GLOBAL_DELETE() GLOBAL_EXISTS() GROUP() GROUP_COUNT() GROUP_LIST() GROUP_MATCH_COUNT() HANGUPCAUSE() HANGUPCAUSE_KEYS() HASH() HASHKEYS() HINT() HOLD_INTERCEPT() IAXPEER() IAXVAR() ICONV() IF() IFMODULE() IFTIME() IMPORT() INC() ISNULL() JABBER_RECEIVE() JABBER_STATUS() JITTERBUFFER() JSON_DECODE() KEYPADHASH() LEN() LISTFILTER() LOCAL() LOCAL_PEEK() LOCK() LOG_GROUP() LTRIM() MAILBOX_EXISTS() MASTER_CHANNEL() MATH() MAX() MD5() MEETME_INFO() MESSAGE() MESSAGE_DATA() MIN() MINIVMACCOUNT() MINIVMCOUNTER() MIXMONITOR() MUTEAUDIO() ODBC() ODBC_FETCH() PARK_GET_CHANNEL() PASSTHRU() PERIODIC_HOOK() PITCH_SHIFT() PJSIP_AOR() PJSIP_CONTACT() PJSIP_DIAL_CONTACTS() PJSIP_DTMF_MODE() PJSIP_ENDPOINT() PJSIP_HEADER() PJSIP_HEADERS() PJSIP_HEADER_PARAM() PJSIP_INHERITABLE_HEADER() PJSIP_MEDIA_OFFER() PJSIP_MOH_PASSTHROUGH() PJSIP_PARSE_URI() PJSIP_PARSE_URI_FROM() PJSIP_RESPONSE_HEADER() PJSIP_RESPONSE_HEADERS() PJSIP_SEND_SESSION_REFRESH() PJSIP_TRANSFER_HANDLING() POLARITY() POP() PP_EACH_EXTENSION() PP_EACH_USER() PRESENCE_STATE() PUSH() QUEUE_EXISTS() QUEUE_GET_CHANNEL() QUEUE_MEMBER() QUEUE_MEMBER_COUNT() QUEUE_MEMBER_LIST() QUEUE_MEMBER_PENALTY() QUEUE_VARIABLES() QUEUE_WAITING_COUNT() QUOTE() RAND() REALTIME() REALTIME_DESTROY() REALTIME_FIELD() REALTIME_HASH() REALTIME_STORE() RECORDING_INFO() REDIRECTING() REGEX() REPLACE() RTRIM() SAYFILES() SCRAMBLE() SET() SHA1() SHARED() SHELL() SHIFT() SIPPEER() SIP_HEADER() SIP_HEADERS() SMDI_MSG() SMDI_MSG_RETRIEVE() SORT() SPEECH() SPEECH_ENGINE() SPEECH_GRAMMAR() SPEECH_RESULTS_TYPE() SPEECH_SCORE() SPEECH_TEXT() SPRINTF() SQL_ESC() SQL_ESC_BACKSLASHES() SRVQUERY() SRVRESULT() STACK_PEEK() STAT() STIR_SHAKEN() STIR_SHAKEN_ATTESTATION() STRBETWEEN() STRFTIME() STRPTIME() STRREPLACE() SYSINFO() TALK_DETECT() TESTTIME() TIMEOUT() TOLOWER() TONE_DETECT() TOUPPER() TRIM() TRYLOCK() TXTCIDNAME() UNLOCK() UNSHIFT() URIDECODE() URIENCODE() UUID() VALID_EXTEN() VARIABLE_EXISTS() VERSION() VMCOUNT() VM_INFO() VOLUME()