---
title: "Send a proactive message to a contact"
method: POST
path: "/v1/contacts/{id}/messages"
tags: ["contacts"]
---

# Send a proactive message to a contact

`POST /v1/contacts/{id}/messages`

Delivers a new outbound message through the exact `channel_node_id` chosen for the contact. Supply `sender_id` when you need to choose the exact workspace sender returned by `/v1/workspaces/{id}/senders`.

## Path parameters

- `id` string, required — Contact id.

## Query parameters

- `workspace_id` string — Optional workspace override. If omitted, Conduit resolves the contact's workspace automatically.

## Request body

- object — Request body for sending a proactive message to a contact through an explicit channel node. Provide either `body` for plain text or `whatsapp_template` for a WhatsApp template send.
  - `channel_node_id` string, required — Exact contact channel node to deliver through.
  - `sender_id` string — Optional workspace sender to use. Required when multiple compatible senders exist and no single default can be chosen.
  - `body` string — Plain-text message body. Required unless `whatsapp_template` is provided.
  - `subject` string — Optional subject for email channel nodes.
  - `whatsapp_template` object — WhatsApp template to send instead of a plain-text body. Only valid for WhatsApp channel nodes.
    - `content_sid` string, required — Twilio Content SID for an approved WhatsApp template returned by `/v1/workspaces/{id}/whatsapp-templates`.
    - `variables` object — Template variable values keyed by Twilio variable name, for example `{ "1": "Alex" }`.

## Response `201`

Contact message accepted

- object — Result returned after a proactive contact message is accepted for delivery.
  - `data` object, required
    - `id` string, nullable, required
    - `workspace_id` string, required
    - `contact_id` string, required
    - `channel_node_id` string, required
    - `sender_id` string, required
    - `channel` string, required
    - `status` 'sent', required

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `409` — Conflict
- `429` — Rate limit exceeded
- `500` — Internal error
- `503` — Service unavailable

---

[API](https://skmtc.dev/conduit/apis/conduit-api.md) · [All operations](https://skmtc.dev/conduit/apis/conduit-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/conduit/conduit-api/revisions/3ad7e17f96ad/schema)
