---
title: Linq API Integration on Truto
slug: linq
category: Ticketing
canonical: "https://truto.one/integrations/detail/linq/"
---

# Linq API Integration on Truto



**Category:** Ticketing  
**Status:** Generally available

## MCP-ready AI tools

Truto exposes 41 tools for Linq that AI agents can call directly.

- **list_all_linq_chats** — List all Linq chats for the authenticated partner. Returns a paginated list of chat objects including id, display_name, handles, service, and health_status. Optionally filter by from (sending phone number) or to (participant handle).
- **create_a_linq_chat** — Create a new Linq chat with specified participants and send a required initial message. Returns the created chat object including id, display_name, handles, and service.parts. The first outbound message cannot contain a link or URL. Required: from, to, message.
- **get_single_linq_chat_by_id** — Get a single Linq chat by id. Returns the chat object including id, display_name, handles, service, and health_status. Required: id.
- **update_a_linq_chat_by_id** — Update a Linq chat's display name or group icon. Returns: status, chat_id. Accepted asynchronously (202); confirm the outcome via chat.group_name_updated or chat.group_icon_updated webhooks. Required: id.
- **create_a_linq_chat_participant** — Add a participant to a linq group chat. Returns: status, trace_id, message. Group chats only; the new participant must support the same messaging service as the group. Required: chat_id, handle.
- **linq_chat_participants_bulk_delete** — Remove a participant from a linq group chat. Returns: status, trace_id, message. Group chats only; the chat must have 3+ participants after removal. Required: chat_id, handle.
- **create_a_linq_chat_leaf** — Leave a linq group chat. Removes your number from the group; after leaving, interaction endpoints for the chat return 409. Returns: status, trace_id, message. Supports iMessage group chats with 4 or more active participants; DM chats are not supported. Required: chat_id.
- **create_a_linq_chat_typing** — Start a typing indicator in a linq chat. Returns an empty 204 response on success. Group chats are not supported, and the indicator may not reach inactive chats. Required: chat_id.
- **linq_chat_typings_bulk_delete** — Stop a typing indicator in a linq chat. Returns an empty 204 response on success. Group chats are not supported. Required: chat_id.
- **create_a_linq_chat_read** — Mark all messages in a chat as read in Linq. Returns an empty 204 response on success. Required: chat_id.
- **create_a_linq_chat_share_contact_card** — Share your Linq contact card (Name and Photo Sharing) with a chat. Returns an empty 204 response on success. A contact card must be configured before sharing. Required: chat_id.
- **create_a_linq_message** — Send a message in Linq without providing a from number; Linq auto-selects the sending line and target chat. Returns the send result including chat_id, message, from, and from_selection. Voice memos are not supported. Required: to, message.
- **get_single_linq_message_by_id** — Get a message in Linq by id. Returns the full message including id, chat_id, delivery_status, parts, and service. Required: id.
- **update_a_linq_message_by_id** — Edit a message part in Linq. Returns the updated message including id, chat_id, delivery_status, parts, and service. Edits allowed up to 5 times within 15 minutes of sending. Required: id, text.
- **delete_a_linq_message_by_id** — Delete a message from Linq by id. Returns an empty 204 response on success. Note: this removes the message from the Linq API only, not from the recipient's chat. Required: id.
- **list_all_linq_message_threads** — List all messages in a thread in Linq. Given any message id in the thread, returns the originator and all replies in chronological order. Returns: id, chat_id, service, preferred_service, from, from_handle, parts, reply_to, is_from_me, is_delivered, is_read, delivery_status, created_at, updated_at, sent_at, delivered_at, read_at, effect. Required: message_id.
- **create_a_linq_chat_voicememo** — Send a voice memo to a chat in linq as an iMessage voice memo bubble. Returns the queued voice memo under the voice_memo key. Supported formats: MP3, M4A, AAC, CAF, WAV, AIFF, AMR. Max 10MB. Required: chat_id.
- **create_a_linq_message_update** — Update an iMessage app card in place in Linq. Returns the new message version as chat_id and message (id, created_at, delivery_status, parts). The original card must be delivered and sent by you; only url, fallback_text, and layout are replaced. Required: message_id, layout.
- **create_a_linq_attachment** — Pre-upload a file in Linq to obtain a presigned URL and a permanent attachment_id. Returns the upload payload including attachment_id, upload_url, download_url, http_method, expires_at, and required_headers. Max file size 100MB; WebP, SVG, FLAC, OGG, and executables are rejected. Required: filename, content_type, size_bytes.
- **get_single_linq_attachment_by_id** — Get metadata for a specific Linq attachment by id. Returns the attachment object including id, filename, content_type, size_bytes, status, download_url, and created_at. The status field is deprecated. Required: id.
- **delete_a_linq_attachment_by_id** — Permanently delete a Linq attachment by id. Returns an empty 204 response on success. Required: id.
- **list_all_linq_phonenumbers** — List phone numbers assigned to the authenticated partner in Linq. Deprecated; use GET /v3/phone_numbers instead. Returns: id, phone_number, type, country_code, capabilities.
- **list_all_linq_phone_numbers** — List phone numbers assigned to the authenticated Linq partner. Returns a list of phone numbers with id, phone_number, forwarding_number, reputation, and health_status. No required parameters.
- **update_a_linq_phone_number_by_id** — Update the forwarding number for a Linq phone number. Returns the updated phone number with id, phone_number, forwarding_number, reputation, and health_status. Pass an empty string to clear forwarding. Required: id, forwarding_number.
- **list_all_linq_available_numbers** — Get the best available Linq sending line (E.164). Returns: phone_number, vcf_url. Optionally pass to as a list of recipient handles (E.164 or email) to make the line choice sticky.
- **list_all_linq_webhook_events** — List available webhook event types in linq. Returns an array of event strings such as message.sent, message.received, and message.delivered.
- **list_all_linq_webhook_subscriptions** — List all webhook subscriptions in Linq. Returns: id, created_at, is_active, subscribed_events, target_url, updated_at, phone_numbers.
- **create_a_linq_webhook_subscription** — Create a new webhook subscription in Linq. Returns: id, target_url, signing_secret, subscribed_events, phone_numbers, is_active, created_at, updated_at. Each target_url can only be used once per account; store the signing_secret securely as it is only returned once. Required: target_url, subscribed_events.
- **get_single_linq_webhook_subscription_by_id** — Get a single Linq webhook subscription by id. Returns: id, target_url, subscribed_events, phone_numbers, is_active, created_at, updated_at. Required: id.
- **update_a_linq_webhook_subscription_by_id** — Update a Linq webhook subscription by id. Returns: id, target_url, subscribed_events, phone_numbers, is_active, created_at, updated_at. The signing secret cannot be changed. Required: id.
- **delete_a_linq_webhook_subscription_by_id** — Delete a Linq webhook subscription by id. Returns an empty 204 response on success. Required: id.
- **create_a_linq_capability_check_imessage** — Check whether a recipient address is reachable via iMessage in Linq. Returns: address, available. Required: address.
- **create_a_linq_capability_check_rc** — Check whether a recipient address supports RCS messaging in Linq. Returns: address, available. Required: address.
- **list_all_linq_contact_cards** — List contact cards in Linq. Returns: phone_number, first_name, last_name, image_url, is_active. Optionally filter by phone_number.
- **create_a_linq_contact_card** — Create a contact card in Linq for initial, one-time setup. Returns: phone_number, first_name, last_name, image_url, is_active. Use PATCH for later updates. Required: phone_number, first_name.
- **linq_contact_cards_bulk_update** — Update an existing active contact card in Linq. Returns: phone_number, first_name, last_name, image_url, is_active. Omitted body fields keep their existing values. Required: phone_number.
- **create_a_linq_location_request** — Send a location sharing request to a contact in a linq chat. Returns: success, message. Only works in 1:1 iMessage chats; group, SMS, or RCS chats return a 409 conflict. Required: chat_id.
- **list_all_linq_chat_locations** — List live location-sharing features for a Linq chat. Returns a GeoJSON Feature array with type, Point geometry, and properties including handle, address, locality, and updated_at. Required: chat_id.
- **list_all_linq_chat_messages** — List messages in a Linq chat thread. Returns: id, chat_id, service, preferred_service, from, from_handle, parts, reply_to, is_from_me, is_delivered, is_read, delivery_status, created_at, updated_at, sent_at, delivered_at, read_at, effect. Required: chat_id.
- **create_a_linq_chat_message** — Send a message to an existing Linq chat. Returns the accepted message with chat_id and the message object (id, created_at, delivery_status, parts, from_handle).parts. Link and iMessage app parts must each be the only part in the message. Required: chat_id, message.
- **create_a_linq_message_reaction** — Add or remove an emoji reaction to a Linq message. Returns: status, trace_id, message. Provide custom_emoji when type is custom; optionally target a specific part via part_index. Required: message_id, operation, type.

## How it works

1. **Link your customer's Linq account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Linq.** The Proxy API is a 1-to-1 mapping of the Linq API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Embed native iMessage support in your helpdesk** — Customer support SaaS platforms can offer their end users the ability to reply to VIP customers in native blue-bubble iMessage threads from within the existing agent inbox, preserving delivery receipts, tapbacks, and rich media.
- **Ship interactive iMessage tickets and boarding passes** — Ticketing and events platforms can send stateful iMessage mini-app cards that update in place — flipping from 'Valid' to 'Redeemed' the moment a QR is scanned — without users leaving the chat thread.
- **Give AI agents a human-feeling voice channel** — AI workflow and agent platforms can drive typing indicators, native voice memos, and reactions so their users' automated conversations feel authentically human rather than like SMS bots.
- **Power location-aware field service dispatch** — Field service and roadside assistance SaaS can request live Apple location shares from customers over iMessage, then orchestrate group chats between the customer, dispatcher, and technician.
- **Boost outbound deliverability with branded Contact Cards** — Sales engagement and CRM platforms can programmatically share branded vCards before first outreach so every subsequent message renders with the SaaS customer's business identity instead of a generic number.

## What you can build

- **Two-way iMessage inbox sync** — Subscribe to Linq webhook events for sent, received, and delivered messages and map chats to your internal ticket or conversation objects in real time.
- **In-place iMessage app card updates** — Push stateful iMessage mini-apps and mutate their layout, URL, or fallback text after delivery to reflect payment, booking, or ticket status changes inside the same bubble.
- **Human-like AI reply pipelines** — Chain typing indicators, native voice memo uploads, and tapback reactions to make automated conversations feel like a real person is on the other side.
- **Live location capture for dispatch and logistics** — Trigger native iMessage location requests and pull the resulting live coordinates into your platform to power routing, ETA, and on-site workflows.
- **Group chat orchestration** — Provision multi-party iMessage chats, manage participants, and share contact cards so your users can loop stakeholders into a single trusted thread.
- **Smart capability-based routing** — Run iMessage and RCS capability checks on destination numbers so your product automatically upgrades to rich layouts when supported and downgrades to SMS when not.

## FAQs

### How does authentication to Linq work through Truto?

Truto handles Linq API credential storage, token management, and per-tenant integrated account isolation, so your end users connect their Linq workspace once and your platform makes calls without touching raw keys.

### Which Linq operations are available today?

The current toolset covers chats, messages, message threads, attachments, participants, typing indicators, read receipts, reactions, voice memos, contact cards, location requests, phone number management, capability checks, and webhook subscriptions.

### How do we receive real-time events like new messages or delivery status?

Linq exposes webhook subscriptions that Truto manages on your behalf — you can list, create, update, and delete subscriptions for events like message sent, received, and delivered, and Truto forwards them into your platform.

### Can we update an iMessage card after it has been delivered?

Yes. Using the message update endpoint you can modify the layout, URL, and fallback text of an iMessage app card after delivery, within Linq's post-send mutation window.

### Does Linq support gracefully falling back from iMessage to RCS or SMS?

Yes. You can run iMessage and RCS capability checks on a destination number before sending, then route rich layouts only to compatible devices and downgrade to plain text where needed.

### Are unified data models available for Linq?

Not yet — Linq is currently accessed via passthrough tools that map directly to Linq's native resources like chats, messages, attachments, and reactions. If you need a normalized ticketing model across providers, this can be built on request.

## Related reading

- [Connect Linq to ChatGPT: Manage iMessage Chats & Group Workflows](https://truto.one/blog/connect-linq-to-chatgpt-manage-imessage-chats-group-workflows/) — Learn how to connect Linq to ChatGPT using a managed MCP server. Automate iMessage groups, handle RCS workflows, and execute complex messaging securely.
- [Connect Linq to Claude: Handle RCS Messaging & Media Attachments](https://truto.one/blog/connect-linq-to-claude-handle-rcs-messaging-media-attachments/) — Learn how to connect Linq to Claude using a managed MCP server. Automate iMessage, RCS, media attachments, and complex messaging workflows without writing custom integration code.
- [Connect Linq to AI Agents: Automate Message Threads & Locations](https://truto.one/blog/connect-linq-to-ai-agents-automate-message-threads-locations/) — Learn how to connect Linq to AI Agents using Truto's /tools endpoint. Automate message threads, check capability routing, and manage live locations natively.
