Linq is an API-first messaging platform that lets you reach people on iMessage, SMS, and RCS through real conversations. Linq handles the messaging plumbing — Apple and carrier delivery, group chats, read receipts, typing indicators, reactions, and attachments — behind a single REST API designed for programmatic access.
Why Linq?
- iMessage, SMS, and RCS in one API: Send and receive across all three channels from the same chats and phone numbers, with automatic delivery over the best available service.
- Rich conversations: Media, link previews, screen and bubble effects, tapback reactions, inline replies, voice memos, and editable messages — not just plain text.
- Group chat management: Create groups, add and remove participants, rename chats, update icons, and leave conversations.
- Capability checks: Verify whether an address supports iMessage or RCS before you send, so you pick the right channel every time.
- Real-time webhooks: Subscribe to message, reaction, participant, and call events with HMAC-SHA256 signature verification.
Using Linq in Sim
Sim's Linq integration connects your agentic workflows directly to Linq using an API key. With 34 operations spanning chats, messages, attachments, phone numbers, capability checks, contact cards, and webhook subscriptions, you can build conversational messaging automations without writing backend code.
Key benefits of using Linq in Sim:
- Conversational agents: Send and read messages in iMessage, SMS, or RCS chats, react with tapbacks, and reply inline to build natural two-way conversations.
- Reliable delivery: Check iMessage/RCS capability and set a preferred service so each message goes out over the right channel.
- Files and voice: Upload attachments up to 100MB and send media or voice memos straight from your workflow.
- Event-driven flows: Manage webhook subscriptions so workflows can react to inbound messages, reactions, and participant changes.
Reach people on iMessage, SMS, and RCS through Linq. Start chats, send messages with media, links, effects, and replies, send voice memos, react with tapbacks, manage group participants, check iMessage/RCS capability, configure contact cards, and subscribe to webhook events — all through a single Linq API key.
Add a participant to a group chat (3+ existing participants)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the group chat |
handle | string | Yes | Phone number (E.164 format) or email address of the participant to add |
| Parameter | Type | Description |
|---|
message | string | Human-readable status message |
status | string | Queued action status |
traceId | string | Trace ID for the queued action |
Check whether an address (phone number or email) supports iMessage
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
address | string | Yes | Phone number (E.164 format) or email address to check |
from | string | No | Sender phone number to check from (defaults to an available number) |
| Parameter | Type | Description |
|---|
address | string | The address that was checked |
available | boolean | Whether the address supports iMessage |
Check whether an address (phone number or email) supports RCS
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
address | string | Yes | Phone number (E.164 format) or email address to check |
from | string | No | Sender phone number to check from (defaults to an available number) |
| Parameter | Type | Description |
|---|
address | string | The address that was checked |
available | boolean | Whether the address supports RCS |
Upload a file to Linq as a reusable attachment (max 100MB) and get an attachment ID to send in messages
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
file | file | No | File to upload (a UserFile from a file-upload field or a previous block) |
fileContent | string | No | Legacy base64-encoded file content fallback |
filename | string | No | Override the file name (defaults to the uploaded file name) |
contentType | string | No | Override the MIME type (defaults to the uploaded file type) |
| Parameter | Type | Description |
|---|
attachmentId | string | Reusable attachment ID to reference when sending messages or voice memos |
downloadUrl | string | URL the attachment can be downloaded from |
filename | string | File name |
contentType | string | MIME type of the file |
sizeBytes | number | File size in bytes |
status | string | Upload status |
Start a new iMessage, SMS, or RCS chat and send the first message
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
from | string | Yes | Sender phone number in E.164 format (e.g. +14155551234) |
to | array | Yes | Recipient handles (phone numbers in E.164 format or email addresses) |
text | string | No | Text content of the first message. Optional, but at least one of text, media, attachment, or link is required |
mediaUrl | string | No | Optional publicly accessible HTTPS URL of an image, video, or file to attach |
attachmentId | string | No | Optional ID of a pre-uploaded attachment to send instead of a media URL |
preferredService | string | No | Preferred delivery service: iMessage, SMS, or RCS |
effectName | string | No | Optional iMessage effect name (e.g. confetti, fireworks, lasers) |
effectType | string | No | Optional effect type: screen or bubble |
replyToMessageId | string | No | Optional message ID to reply to inline |
replyToPartIndex | number | No | Optional part index of the message being replied to |
idempotencyKey | string | No | Optional idempotency key to safely retry the request |
| Parameter | Type | Description |
|---|
chatId | string | ID of the created chat |
displayName | string | Display name of the chat |
isGroup | boolean | Whether the chat is a group chat |
service | string | Delivery service used (iMessage, SMS, RCS) |
handles | json | Participant handles in the chat |
healthStatus | json | Messaging line health status |
message | json | The sent message object with parts and delivery info |
Set up a contact card (Name and Photo Sharing) for a phone number
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
phoneNumber | string | Yes | Phone number in E.164 format the card applies to |
firstName | string | Yes | First name to display |
lastName | string | No | Last name to display |
imageUrl | string | No | Profile photo URL |
| Parameter | Type | Description |
|---|
phoneNumber | string | Phone number the card applies to |
firstName | string | First name |
lastName | string | Last name |
imageUrl | string | Profile photo URL |
isActive | boolean | Whether the card is active |
Subscribe an HTTPS endpoint to Linq webhook events
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
targetUrl | string | Yes | HTTPS endpoint that will receive webhook events |
subscribedEvents | array | Yes | Event types to subscribe to (e.g. message.sent, message.delivered) |
phoneNumbers | array | No | E.164 phone numbers to filter events by (omit for all numbers) |
| Parameter | Type | Description |
|---|
id | string | Subscription ID |
targetUrl | string | Endpoint that receives events |
subscribedEvents | json | Subscribed event types |
phoneNumbers | json | Filtered phone numbers (null = all) |
isActive | boolean | Whether the subscription is active |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |
signingSecret | string | HMAC-SHA256 signing secret. Store securely — it cannot be retrieved again |
Permanently delete an attachment owned by your account
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
attachmentId | string | Yes | The unique identifier of the attachment to delete |
| Parameter | Type | Description |
|---|
success | boolean | Whether the attachment was deleted |
Delete a message from the Linq API only (does not unsend it; recipients still see it)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
messageId | string | Yes | The unique identifier of the message to delete |
| Parameter | Type | Description |
|---|
success | boolean | Whether the message was deleted |
Delete a webhook subscription from your account
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
subscriptionId | string | Yes | The unique identifier of the webhook subscription to delete |
| Parameter | Type | Description |
|---|
success | boolean | Whether the subscription was deleted |
Edit the text of a sent message (up to 5 times, within 15 minutes of sending; iMessage only)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
messageId | string | Yes | The unique identifier of the message to edit |
text | string | Yes | New text content for the message part |
partIndex | number | No | Index of the message part to edit (defaults to 0) |
| Parameter | Type | Description |
|---|
id | string | Message ID |
chatId | string | ID of the chat the message belongs to |
isFromMe | boolean | Whether the message was sent by you |
isDelivered | boolean | Whether the message was delivered |
isRead | boolean | Whether the message was read |
service | string | Delivery service (iMessage, SMS, RCS) |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |
sentAt | string | ISO 8601 sent timestamp |
parts | json | Updated message parts with reactions |
message | json | The full updated message object |
Retrieve metadata for an attachment, including its download URL and status
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
attachmentId | string | Yes | The unique identifier of the attachment |
| Parameter | Type | Description |
|---|
id | string | Attachment ID |
filename | string | File name |
contentType | string | MIME type of the file |
sizeBytes | number | File size in bytes |
status | string | Upload status (pending, complete, failed) |
downloadUrl | string | URL to download the file |
createdAt | string | ISO 8601 creation timestamp |
Retrieve a chat by ID, including participants and line health
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
| Parameter | Type | Description |
|---|
id | string | Chat ID |
displayName | string | Display name of the chat |
isGroup | boolean | Whether the chat is a group chat |
isArchived | boolean | Whether the chat is archived |
service | string | Delivery service (iMessage, SMS, RCS) |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |
handles | json | Participant handles in the chat |
healthStatus | json | Messaging line health status |
Retrieve contact cards, optionally filtered by phone number
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
phoneNumber | string | No | E.164 phone number to filter by (omit to return all cards) |
| Parameter | Type | Description |
|---|
contactCards | array | Contact cards on the account |
↳ phoneNumber | string | Phone number in E.164 format |
↳ firstName | string | First name |
↳ lastName | string | Last name |
↳ imageUrl | string | Profile photo URL |
↳ isActive | boolean | Whether the card is active |
Retrieve a single message by ID, including parts, reactions, and delivery status
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
messageId | string | Yes | The unique identifier of the message |
| Parameter | Type | Description |
|---|
id | string | Message ID |
chatId | string | ID of the chat the message belongs to |
isFromMe | boolean | Whether the message was sent by you |
isDelivered | boolean | Whether the message was delivered |
isRead | boolean | Whether the message was read |
service | string | Delivery service (iMessage, SMS, RCS) |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |
sentAt | string | ISO 8601 sent timestamp |
parts | json | Message parts (text, media, link) with reactions |
message | json | The full message object |
Retrieve a webhook subscription by ID
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
subscriptionId | string | Yes | The unique identifier of the webhook subscription |
| Parameter | Type | Description |
|---|
id | string | Subscription ID |
targetUrl | string | Endpoint that receives events |
subscribedEvents | json | Subscribed event types |
phoneNumbers | json | Filtered phone numbers (null = all) |
isActive | boolean | Whether the subscription is active |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |
Leave an iMessage group chat (4+ active participants; not supported for direct chats)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the group chat |
| Parameter | Type | Description |
|---|
message | string | Human-readable status message |
status | string | Queued action status (e.g. accepted) |
traceId | string | Trace ID for the queued action |
List chats, optionally filtered by sender or participant handle
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
from | string | No | Filter by sender phone number in E.164 format |
to | string | No | Filter by participant handle (phone number or email) |
limit | number | No | Results per page (default 20, max 100) |
cursor | string | No | Pagination cursor from a previous response |
| Parameter | Type | Description |
|---|
chats | json | Array of chat objects |
nextCursor | string | Cursor for the next page, or null if there are no more results |
List messages in a chat with pagination
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
limit | number | No | Maximum number of messages to return |
cursor | string | No | Pagination cursor from a previous response |
| Parameter | Type | Description |
|---|
messages | json | Array of message objects with parts and reactions |
nextCursor | string | Cursor for the next page, or null if there are no more results |
List all phone numbers assigned to your partner account, with line health
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
| Parameter | Type | Description |
|---|
phoneNumbers | array | Phone numbers assigned to the account |
↳ id | string | Phone number ID |
↳ phoneNumber | string | Phone number in E.164 format |
↳ healthStatus | json | Line health status (status, doc_url) |
List all messages in the thread that contains a given message
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
messageId | string | Yes | The ID of any message in the thread |
order | string | No | Sort order: asc (oldest first) or desc (newest first) |
limit | number | No | Maximum number of messages to return |
cursor | string | No | Pagination cursor from a previous response |
| Parameter | Type | Description |
|---|
messages | json | Array of message objects in the thread |
nextCursor | string | Cursor for the next page, or null if there are no more results |
List all webhook event types available to subscribe to
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
| Parameter | Type | Description |
|---|
events | json | Available webhook event type names |
docUrl | string | Documentation URL for webhook events |
List all webhook subscriptions on your account
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
| Parameter | Type | Description |
|---|
subscriptions | array | Webhook subscriptions |
↳ id | string | Subscription ID |
↳ targetUrl | string | Endpoint that receives events |
↳ subscribedEvents | json | Subscribed event types |
↳ phoneNumbers | json | Filtered phone numbers (null = all) |
↳ isActive | boolean | Whether the subscription is active |
↳ createdAt | string | ISO 8601 creation timestamp |
↳ updatedAt | string | ISO 8601 update timestamp |
Mark all messages in a chat as read
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
| Parameter | Type | Description |
|---|
success | boolean | Whether the chat was marked as read |
Add or remove a tapback reaction on a message
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
messageId | string | Yes | The unique identifier of the message to react to |
operation | string | Yes | Whether to add or remove the reaction: add or remove |
type | string | Yes | Reaction type: love, like, dislike, laugh, emphasize, question, custom, or sticker |
customEmoji | string | No | Emoji to use when type is custom |
partIndex | number | No | Index of the message part to react to (defaults to the entire message) |
| Parameter | Type | Description |
|---|
message | string | Human-readable status message |
status | string | Queued action status |
traceId | string | Trace ID for the queued action |
Remove a participant from a group chat (minimum 3 participants must remain)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the group chat |
handle | string | Yes | Phone number (E.164 format) or email address of the participant to remove |
| Parameter | Type | Description |
|---|
message | string | Human-readable status message |
status | string | Queued action status |
traceId | string | Trace ID for the queued action |
Send a message to an existing chat, with optional media, link, effect, or reply
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
text | string | No | Text content of the message. Optional, but at least one of text, media, attachment, or link is required |
mediaUrl | string | No | Optional publicly accessible HTTPS URL of an image, video, or file to attach |
attachmentId | string | No | Optional ID of a pre-uploaded attachment to send instead of a media URL |
linkUrl | string | No | Optional URL to send as a rich link preview. Linq requires a link to be its own message, so when set, text and media are ignored |
preferredService | string | No | Preferred delivery service: iMessage, SMS, or RCS |
effectName | string | No | Optional iMessage effect name (e.g. confetti, fireworks, lasers) |
effectType | string | No | Optional effect type: screen or bubble |
replyToMessageId | string | No | Optional message ID to reply to inline |
replyToPartIndex | number | No | Optional part index of the message being replied to |
idempotencyKey | string | No | Optional idempotency key to safely retry the request |
| Parameter | Type | Description |
|---|
chatId | string | ID of the chat the message was sent to |
messageId | string | ID of the sent message |
deliveryStatus | string | Delivery status (pending, queued, sent, delivered, failed) |
sentAt | string | ISO 8601 timestamp the message was sent |
service | string | Delivery service (iMessage, SMS, RCS) |
message | json | The full sent message object with parts |
Send a voice memo to a chat from a URL or a pre-uploaded attachment
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
voiceMemoUrl | string | No | Publicly accessible HTTPS URL of the audio file (MP3, M4A, AAC, CAF, WAV, AIFF, AMR) |
attachmentId | string | No | ID of a pre-uploaded audio attachment (use instead of voiceMemoUrl) |
| Parameter | Type | Description |
|---|
id | string | ID of the sent voice memo message |
status | string | Delivery status |
from | string | Sender handle |
to | json | Recipient handles |
service | string | Delivery service (iMessage, SMS, RCS) |
voiceMemo | json | Audio file metadata (id, filename, mime_type, size_bytes, url, duration_ms) |
Share your configured contact card (Name and Photo Sharing) with a chat
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
| Parameter | Type | Description |
|---|
success | boolean | Whether the contact card was shared |
Show a typing indicator in a one-on-one chat (iMessage only, not group chats)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
| Parameter | Type | Description |
|---|
success | boolean | Whether the typing indicator was sent |
Stop the typing indicator in a one-on-one chat (iMessage only, not group chats)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
| Parameter | Type | Description |
|---|
success | boolean | Whether the typing indicator was stopped |
Update chat properties such as group display name and icon
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
chatId | string | Yes | The unique identifier of the chat |
displayName | string | No | New display name for the group chat |
groupChatIcon | string | No | New group chat icon (publicly accessible image URL) |
| Parameter | Type | Description |
|---|
chatId | string | ID of the updated chat |
status | string | Status of the queued update |
Partially update an existing active contact card for a phone number
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
phoneNumber | string | Yes | Phone number in E.164 format identifying the card to update |
firstName | string | No | New first name |
lastName | string | No | New last name |
imageUrl | string | No | New profile photo URL |
| Parameter | Type | Description |
|---|
phoneNumber | string | Phone number the card applies to |
firstName | string | First name |
lastName | string | Last name |
imageUrl | string | Profile photo URL |
isActive | boolean | Whether the card is active |
Update a webhook subscription (target URL, events, phone filter, or active state)
| Parameter | Type | Required | Description |
|---|
apiKey | string | Yes | Linq API key |
subscriptionId | string | Yes | The unique identifier of the webhook subscription |
targetUrl | string | No | New HTTPS endpoint that will receive events |
subscribedEvents | array | No | New set of event types to subscribe to |
phoneNumbers | array | No | New set of E.164 phone numbers to filter by |
isActive | boolean | No | Whether the subscription should be active |
| Parameter | Type | Description |
|---|
id | string | Subscription ID |
targetUrl | string | Endpoint that receives events |
subscribedEvents | json | Subscribed event types |
phoneNumbers | json | Filtered phone numbers (null = all) |
isActive | boolean | Whether the subscription is active |
createdAt | string | ISO 8601 creation timestamp |
updatedAt | string | ISO 8601 update timestamp |