Skip to content

Call reject stanza

Signalling - call-reject

SIG-08 - status: review - audio, video

The <reject> action stanza declines an incoming call offer before the media phase, naming the call by call-id/call-creator with no child elements.

Wire layout:

<call to="{caller-jid}">
  <reject call-id="{call-id}" call-creator="{call-creator-jid}"/>
</call>

Construction.

  • The outer <call> MUST carry to = the JID the offer was received from (the caller). The builder MUST NOT add an id attribute to <call>; the I/O layer's stanza id applies.
  • <reject> MUST carry exactly two attributes:
  • call-id — copied verbatim from the declined <offer> (see call-offer).
  • call-creatorcall-creator JID copied verbatim from that <offer>.
  • <reject> MUST be empty: no child elements, no content bytes.

Semantics.

  • Send <reject> only to decline an offer not yet accepted; distinct from <terminate> (see call-terminate), which ends a call past offer.
  • <reject> MUST NOT be preceded by <preaccept> or <accept> for the same call from the same device; it is the terminal action for that offer.
  • No media keying, relay allocation, or transport negotiation occurs on the reject path.

Receiving.

  • A <reject> arrives in an inbound <call> stanza with the standard envelope attributes (from, id, t, optionally notify, platform, version, e). A receiver MUST treat call-id and call-creator as required; a <reject> missing either MUST be rejected as malformed.
  • The generic <call> acknowledgement covers receipt; no <receipt>-style ack-of-offer is emitted (that is specific to <offer>).

Unlike <terminate>, <reject> carries no reason, duration, or audio_duration attributes and no <destination> child.

Requires: call-offer
Breakdown: flow-call-rejected, flow-incoming-1to1

Implemented by

Flavor Status Source Notes
whatsapp-rust working history - blame - commits 674e851
zapo-caller working ported from zapo-caller signaling.ts

Annotation wacrg:SIG-08 — a flavor marks its implementation site in source with this comment; a script clones the source, finds it, and attaches the commit blame/permalink.

Contributors

Contributor Role
Rajeh Taher Rajeh Taher wrote initial spec

protocol history / diff - blame

Open questions - Whether any client emits an optional attribute (e.g. a reason or media-type hint) under newer protocol versions; none is observed in the current builders or parser. - Whether the caller forwards a reject-derived terminate to other callee devices, or whether each device rejects independently.

References - RFC 2119 — Key words for use in RFCs

Changelog

  • 2026-06-21 — Initial spec entry.

Back to the full spec