---
title: "Deactivate a sender channel"
method: POST
path: "/v1/senders/{senderId}/channels/{channel}/deactivate"
tags: ["Senders"]
---

# Deactivate a sender channel

`POST /v1/senders/{senderId}/channels/{channel}/deactivate`

## Request

- Base URL: `https://api.zavu.dev`
- URL: `https://api.zavu.dev/v1/senders/{senderId}/channels/{channel}/deactivate`
- Auth: HTTP bearer

Switch off the account connected to this sender for one channel. Sends on it are refused and it leaves the sender's `channels`. The account stays connected, so activating it again needs no reconnection.

The month already paid is not refunded, and re-activating before it ends charges nothing. Calling this on a channel that is already inactive changes nothing. Not available with test-mode keys.

## Path parameters

- `senderId` string, required
- `channel` 'whatsapp' | 'telegram' | 'instagram' | 'messenger' | 'email', required: A channel whose connection has an on/off switch. `sms`, `sms_oneway` and `voice` are billed per message and per phone number, are always on, and have nothing to activate.

## Response `200`

The channel is inactive.

- SenderChannelDeactivationResponse
  - `sender` Sender, required
    - `id` string, required
    - `name` string, required
    - `phoneNumber` string: Phone number in E.164 format. Absent on a sender that has none: an email-only sender, or one created with only `enableSmsOneway`.
    - `channels` string[]: Channels this sender can actually send on right now: configured AND activated. Empty means the sender cannot send or receive anything yet: a phoneNumber alone does not enable SMS or voice, and a connected account that is not activated is left out, because every send on it is refused. Check this rather than inferring capability from phoneNumber or emailAddress, and turn a connected channel on with `POST /v1/senders/{senderId}/channels/{channel}/activate`.
    - `isDefault` boolean: Whether this sender is the project's default.
    - `webhook` SenderWebhook: Webhook configuration for the sender.
      - `url` string, uri, required: HTTPS URL that will receive webhook events.
      - `events` WebhookEvent[], required: List of events the webhook is subscribed to.
      - `secret` string: Webhook secret for signature verification. Only returned on create or regenerate.
      - `active` boolean, required: Whether the webhook is active.
      - `signatureVersion` 'v1' | 'v1+v2' | 'v2', required: Which `X-Zavu-Signature` scheme this receiver is sent. - `v1`: `v1=HMAC_SHA256(secret, body)`. The scheme used before this was configurable. Existing webhooks stay on it until you move them. - `v2`: `v2=HMAC_SHA256(secret, "{t}.{body}")`. The current scheme, and the default for new senders. It signs the timestamp together with the body. - `v1+v2`: both signatures, sharing one `t`. The migration setting: a receiver reading either one works, so you can deploy and confirm your new verifier before switching over. Moving from `v1` straight to `v2` returns `400`. Set `v1+v2` first. See https://docs.zavu.dev/guides/receiving-messages/signature-migration
    - `whatsapp` object: WhatsApp Business Account information. Only present if a WABA is connected.
      - `phoneNumberId` string: WhatsApp phone number ID from Meta.
      - `displayPhoneNumber` string: Display phone number.
      - `paymentStatus` object: Payment configuration status from Meta.
        - `setupStatus` string: Payment setup status (COMPLETE, NOT_STARTED, etc.).
        - `methodStatus` string: Payment method status (VALID, NONE, etc.).
        - `canSendTemplates` boolean: Whether template messages can be sent. Requires setupStatus=COMPLETE and methodStatus=VALID.
    - `emailAddress` string: From-address for the email channel, if configured.
    - `emailReceivingEnabled` boolean: Whether inbound email receiving is enabled for this sender.
    - `emailCatchAllEnabled` boolean: Whether catch-all receiving is enabled. When true (and emailReceivingEnabled is true), this sender receives email addressed to any local part at its domain, not just its own address. The original recipient is delivered in the message.inbound webhook's data.to.
    - `createdAt` string, date-time
    - `updatedAt` string, date-time
  - `channel` 'whatsapp' | 'telegram' | 'instagram' | 'messenger' | 'email', required: A channel whose connection has an on/off switch. `sms`, `sms_oneway` and `voice` are billed per message and per phone number, are always on, and have nothing to activate.
  - `deactivated` boolean, required: True when this call switched the channel off. False when it was already inactive.

## Other responses

- `400`: The channel has no activation (`sms`, `sms_oneway`, `voice`), or the key is a test-mode key.
- `401`: Unauthorized.
- `404`: Sender not found.
- `409`: `channel_not_connected`: the sender has no account for this channel.

## Changes

> 80 revisions in range; 1 not diffed.

- **2026-10-23** `ce129d29ce3c`: 1 warning
  - added the new `contact.identity_linked` enum value to the `sender/webhook/events/items/` response property for the response status `200`

[Operation history](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/changes/v1/senders/:senderId/channels/:channel/deactivate/post.md)

---

[API](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api.md) - [All operations](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/llms.txt) - [OpenAPI document](https://skmtc.dev/zavudev/apis/zavu-unified-messaging-layer-api/revisions/75bc777b0ffb?raw)
