---
title: "Send an AI-generated LinkedIn voice message to a contact"
method: POST
path: "/v3/contacts/{id}/send-direct-linkedin-ai-voice"
tags: ["Direct Outreach"]
---

# Send an AI-generated LinkedIn voice message to a contact

`POST /v3/contacts/{id}/send-direct-linkedin-ai-voice`

<small>_Requires the `contacts:operate` scope (or a broader one that includes it)._</small>

Generates and sends an AI voice message to the contact via LinkedIn outside of any sequence.
The caller must already be connected with the contact on LinkedIn.
The voice is synthesized from the provided script using the account's text-to-speech settings.

## Path parameters

- `id` integer, required

## Request body

- object
  - `linkedInAccountId` integer, required — ID of the LinkedIn account to send from. Must be greater than 0.
  - `script` string, required — Text script to synthesize into an AI voice message.

## Response `200`

AI voice message sent successfully.

- object — Response returned after a direct LinkedIn action is dispatched.
  - `actionType` 'connect' | 'inMail' | 'message' | 'voice' | 'aiVoice', required — The type of LinkedIn action performed.
  - `linkedInActivityId` integer, required — ID of the LinkedIn activity record created for this action.
  - `sentAtUtc` string, date-time, required — UTC timestamp when the action was dispatched.

## Other responses

- `400` — Validation failure on the route parameter or request body, or a business rule rejection. | `code` | Meaning | |---|---| | `directLinkedIn.voiceTooLong` | Synthesized voice exceeds the allowed duration | | `directLinkedIn.missingVariables` | Script contains unresolved template variables |
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — LinkedIn direct actions feature is disabled for this account.
- `404` — Contact, LinkedIn profile, or LinkedIn account not found.
- `409` — Conflict — the LinkedIn account state or connection status prevents the action. | `code` | Meaning | |---|---| | `directLinkedIn.linkedInAccountInactive` | Specified LinkedIn account is inactive | | `directLinkedIn.invalidCookie` | LinkedIn account session cookie is invalid | | `directLinkedIn.notConnected` | Not connected with this contact on LinkedIn |
- `429` — Rate limit reached. | `code` | Meaning | |---|---| | `directLinkedIn.dailyLimitReached` | Daily AI voice message limit reached | | `directLinkedIn.weeklyLimitReached` | Weekly AI voice message limit reached |

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
