Messaging

Messaging

Voyager provides full messaging capabilities — send messages to connections and Open Profiles, read conversations, manage your inbox, and send InMail to non-connections.

Send a Message

$curl -X POST "$BASE/api/send" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "profileUrl": "https://www.linkedin.com/in/janesmith/",
> "message": "Hi Jane, great connecting with you. Would love to chat about your work at Acme."
> }'
1{
2 "success": true,
3 "method": "api-direct"
4}

How Message Sending Works

Voyager uses a multi-phase approach to find or create the right conversation:

  1. Phase 0 — Cache lookup: If you’ve messaged this person before, Voyager has the conversation ID cached for instant delivery
  2. Phase 1 — Participant query: REST API lookup by recipient URN
  3. Phase 1.5 — Conversation scan: Scans recent conversations and matches by participant profile ID
  4. Phase 2 — New conversation: Creates a new conversation thread

For faster repeat sends, include recipientUrn from a previous profile lookup. This lets Voyager skip URN resolution entirely.

$# Faster send with cached URN
$curl -X POST "$BASE/api/send" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "profileUrl": "https://www.linkedin.com/in/janesmith/",
> "message": "Following up on our conversation...",
> "recipientUrn": "urn:li:fsd_profile:ABC123"
> }'

Send InMail

Send InMail to non-connections (requires InMail credits on LinkedIn):

$curl -X POST "$BASE/api/send-inmail" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "profileUrl": "https://www.linkedin.com/in/targetperson/",
> "subject": "Quick question about your platform work",
> "message": "Hi, I noticed your recent talk on distributed systems..."
> }'

List Conversations

$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/conversations?limit=20&category=PRIMARY_INBOX"

Conversation Categories

CategoryDescription
INBOXAll conversations
PRIMARY_INBOXPrimary inbox (default LinkedIn view)
SECONDARY_INBOXOther / secondary messages
ARCHIVED_INBOXArchived conversations
SPAM_INBOXSpam / filtered messages

Pagination

Conversations use cursor-based pagination:

$# First page
$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/conversations?limit=20"
$
$# Next page (use nextCursor from previous response)
$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/conversations?limit=20&nextCursor=CURSOR_VALUE"

Read Messages in a Conversation

$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/conversations/CONVERSATION_URN?limit=50"

Or by profile URL:

$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/messages?profileUrl=https://www.linkedin.com/in/janesmith/&limit=20"

Mark as Read

$curl -X POST "$BASE/api/conversations/CONVERSATION_ID/read" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER"

Export Full Inbox

Export your complete inbox history:

$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/export/inbox?months=3&categories=PRIMARY_INBOX"

Event-Driven Messaging

Instead of polling for new messages, use webhooks:

$# Create a webhook for incoming messages
$curl -X POST "$BASE/api/webhooks" \
> -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> -H "Content-Type: application/json" \
> -d '{
> "url": "https://your-server.com/webhook",
> "events": ["message_received"],
> "secret": "your-hmac-secret"
> }'

Or poll the event feed:

$curl -H "Authorization: Bearer $KEY" \
> -H "X-User-Id: $USER" \
> "$BASE/api/events?types=message.received&since=2026-03-17T00:00:00Z&limit=50"

LinkedIn monitors messaging frequency. Recommended intervals:

  • Between messages: 30-60 seconds
  • Daily limit: No hard cap, but stay under 50-100 for new accounts
  • New connections: Wait at least a few hours after connecting before messaging

Sending too many messages too quickly can trigger LinkedIn’s spam detection, which may temporarily restrict your account’s messaging ability.

  • Connections — Connect before messaging non-Open Profiles
  • Webhooks — Real-time message notifications
  • Rate Limiting — Usage tracking and recommended intervals