Channel messages that trigger no_response still incur full API billing

Resolved 💬 4 comments Opened Jun 6, 2026 by meowmana Closed Jul 13, 2026

Description

When using Claude Code in channel mode (e.g., Telegram plugin channel), every incoming message triggers a full API call so the model can decide whether to respond. When the model decides not to respond (e.g., the message is not directed at it, or is a system notification), the API call still completes with a requestId and full token usage — meaning the user is billed for input + output tokens even though no visible response was produced.

Steps to Reproduce

  1. Run Claude Code with a channel plugin (e.g., --channels plugin:telegram@claude-plugins-official)
  2. Receive messages on the channel that are not directed at the assistant (group chat noise, system notifications, etc.)
  3. The model evaluates each message using thinking/tool_use, decides not to respond, and returns a no-response result
  4. Each such evaluation is a full API call with token consumption

Expected Behavior

Messages that result in no response should either:

  • Not be sent to the API at all (client-side filtering for obvious non-relevant messages)
  • Use a lightweight/cheaper evaluation mechanism
  • At minimum, be clearly documented as billable events so users can make informed decisions about channel configuration

Actual Behavior

Every channel message, regardless of whether the model responds, incurs full API billing (input tokens for the entire conversation context + output tokens for the thinking/decision process). In high-traffic channels (group chats), this leads to significant unexpected costs with zero user-visible output.

Impact

  • Cost: A group chat with 100 messages/hour where the model only responds to 10% still bills for 100 API calls
  • Model regression: This behavior worsened with Opus 4.8 — the model more frequently decides not to respond (compared to 4.6/4.7 which respond more reliably), yet each "decision not to respond" still costs tokens
  • User surprise: There is no indication in the UI or billing that silent evaluations are consuming API credits

Environment

  • Claude Code version: 2.1.161 / 2.1.167
  • Channel: plugin:telegram
  • Models tested: claude-opus-4-6, claude-opus-4-8

Suggested Solutions

  1. Client-side pre-filter: Allow channel plugins to mark messages as "low priority" or "notification only" so they skip API evaluation entirely
  2. Cached/batched evaluation: Bundle multiple pending messages into a single cheaper evaluation call
  3. Billing transparency: Show no-response API calls separately in usage tracking so users understand their true cost
  4. Channel-level config: Let users set a response threshold or filter pattern to reduce unnecessary evaluations

---
Filed from a production deployment running Claude Code as a persistent agent with Telegram channel integration.

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗