watchOS CallKit calls: no DTMF keypad, no audio-route picker, no Recents — are these system-gated for third-party providers?

Hi all,

I'm building a watchOS VoIP app that places and receives calls through CallKit, with call audio staying on the watch (not routed to the paired iPhone). Calls connect and audio works. But three parts of the system in-call UI that the native Phone app shows never appear for my app, and I'd like to confirm whether this is expected or a misconfiguration on my side.

Environment

  • watchOS 26.0, Apple Watch 11 (reproduced on a physical device)
  • Xcode 27.1
  • Companion watchOS app, calls driven by CXProvider / CXCallController

What's missing during an active call

  1. No DTMF keypad. The user can't open a keypad from the system call screen, so in-call DTMF (e.g. navigating an IVR) is impossible.
  2. No audio-route picker. No control to switch output route (e.g. speaker vs. the default route).
  3. No entry in Recents. Completed calls don't appear in the watch's call history.

The system call UI is full-screen and in front, so I also can't present my own keypad or route control on top of it.

What I've already tried (all public API)

// Reported call
callUpdate.supportsDTMF = true

// Provider configuration
config.includesCallsInRecents = true
config.supportedHandleTypes = [.phoneNumber]
config.maximumCallGroups = 1

// Audio session: route changes programmatically, but adds no user-facing picker
try session.setCategory(.playAndRecord, mode: .voiceChat)
try session.overrideOutputAudioPort(.speaker)

// Never invoked — no keypad exists to generate the action
func provider(_ provider: CXProvider, perform action: CXPlayDTMFCallAction) { ... }

None of these make the keypad, the route picker, or a Recents entry appear. The behavior is identical regardless of these values, which makes me suspect these controls are exposed only for the native telephony/relay call path, not for third-party CXProvider calls on the watch.

Questions

  1. Are the in-call DTMF keypad, audio-route picker, and Recents entry available to third-party CXProvider calls on standalone watchOS at all, or are they reserved for the system (relayed cellular / FaceTime) call UI?
  2. If not, is there a supported way to present my own keypad or route control during an active CallKit call, given the system call UI is in front?

Thanks!

watchOS CallKit calls: no DTMF keypad, no audio-route picker, no Recents — are these system-gated for third-party providers?
 
 
Q