---
title: "Send a message to an existing chat or start a new one (safety limit: 150/day). Use chat_id for existing chats, provider_"
method: POST
path: "/api/v1/inbox/conversations/{chat_id}/messages"
tags: ["inbox"]
---

# Send a message to an existing chat or start a new one (safety limit: 150/day). Use chat_id for existing chats, provider_

`POST /api/v1/inbox/conversations/{chat_id}/messages`

## Request

- Base URL: `https://crispy.sh`
- URL: `https://crispy.sh/api/v1/inbox/conversations/{chat_id}/messages`
- Auth: HTTP bearer

## Path parameters

- `chat_id` string, required

## Request body

- object
  - `provider_id` string: LinkedIn provider_id of the recipient. Provide this OR chat_id to start a new conversation.
  - `text` string: The message text to send (max 8000 chars). Optional when voice_note_url is provided.
  - `voice_note_url` string: Public URL of an audio file to send as a native LinkedIn voice note (.m4a, .mp3, .ogg, .wav, max 5MB). When provided, text is optional. The audio renders as a playable waveform in the recipient's inbox, not a file download.
  - `attachments` object[]: Images or files to attach (max 10MB each; .mp4 video files are capped at 5MB)
    - `url` string, required: Public URL of the file to attach
    - `filename` string, required: Filename with extension (e.g. 'chart.png', 'proposal.pdf')
  - `campaign_id` string: Campaign slug (from list_campaigns) to track this action under.

## Response `200`

Success

## Other responses

- `401`: Missing or expired API key
- `403`: Insufficient key scope or permission denied
- `429`: Rate limit exceeded

---

[API](https://skmtc.dev/crispy/apis/crispy-rest-api.md) · [All operations](https://skmtc.dev/crispy/apis/crispy-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crispy/apis/crispy-rest-api/revisions/6bed0974d9ce?raw)
