---
title: "Post a message to a specific conversation"
method: POST
path: "/conversations/{conversationId}/messages"
tags: ["Conversations"]
---

# Post a message to a specific conversation

`POST /conversations/{conversationId}/messages`

This operation posts a message in a conversation as specified by the conversationId. You can retrieve the conversationId by [listing the conversations for a contact](/reference/contactconversations) or by [listing all conversations in the organization](/reference/conversations). You can also [send messages to a phone number, an email address, fax number, or securely message a contact](/reference/postmessagefromendpoint) using a [specific internal endpoint](/reference/internalendpoints). The `requestID` returned by this API may be used to match against the `requestID` field of the `conversationItem.created` webhook event to identify when the message is posted.
## Posting an internal message containing a page for an organization member
To post a message with a page for an organization member, you'll first need to know the member's id. You can find the id of the organization member by [listing all organization members](/reference/organizationmembers). Once the member id is known, you can post a message to the conversation with `internal=true` and an element of `type=page` and `value=<member-id>` in the list of `body` elements being posted.
The `body` parameter is a list of message elements. Each element can be of type `text` or `page`. The request can contain combinations of `text` and `page` elements to create internal messages with useful content while also notifying a set of members.
## Posting to a Team or Note conversation
You can also use this API to post messages into a Team or Note conversations. For Note conversations, you will have to specify `internal=true` since only internal messages can be posted in Note conversations.

## Path parameters

- `conversationId` string, required

## Headers

- `s-idempotency-key` string

## Request body

- ConversationMessagePost
  - `attachments` ConversationMessagePostAttachment[]
    - `attachmentId` string, required — The id of the attachment. In most cases, this will be a media id returned from posting a file to the [media endpoint](/reference/uploadmedia).
    - `title` string, required — The title of the attachment
  - `author` string — The ID of the organization member (teammate, team, or organization) to send the message as. If not provided, defaults to the organization.
  - `body` ConversationMessageBodyElement[], required
    - `type` 'text' | 'page', required
    - `value` string, required — The value of the message body element
  - `internal` boolean — Whether the message is internal or not
  - `stayArchived` boolean — Whether the conversation should stay archived (if it is already archived) after the message is sent

## Response `200`

ok

- object
  - `requestId` string, required — The id of an asynchronous request

## Other responses

- `400` — bad request
- `422` — duplicate request
- `500` — unexpected error

---

[API](https://skmtc.net/sprucehealth/apis/spruce-health-api.md) · [All operations](https://skmtc.net/sprucehealth/apis/spruce-health-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sprucehealth/spruce-health-api/revisions/988e298cd9fd/schema)
