Messages
Messages are individual communications within a chat thread.
Messages can include text, media attachments, rich link previews, special effects (like confetti or fireworks), and reactions. All messages are associated with a specific chat and sent from a phone number you own.
Messages support delivery status tracking, read receipts, and editing capabilities.
Rich Link Previews
Send a URL as a link part to deliver it with a rich preview card showing the
page’s title, description, and image (when available). A link part must be the
only part in the message — it cannot be combined with text or media parts.
To send a URL without a preview card, include it in a text part instead.
Limitations:
- A
linkpart cannot be combined with other parts in the same message. - Maximum URL length: 2,048 characters.
App Clips
An app_clip part sends a registered App Clip — not only Linq’s Apple Pay
checkout, but any partner’s own App Clip. Like a link part it must be the
only part in the message, and it is iMessage only — it never downgrades
to SMS or RCS. The payment-checkout use of this part is covered in the
Payments section.
Ephemeral Messages (Privacy Tier)
For regulated or sensitive conversations, opt in to the ephemeral messages tier by contacting your Linq support contact. When enabled, every message on the covered phone numbers is given a retention window configured for your account. After that window, the message’s text, formatting, and attachment references are no longer retrievable through the API — see the Attachments row below for how the attachment media itself is handled. Metadata about the message is retained: message identifiers, timestamps, phone numbers, and delivery state. Metadata retention is not bounded by this window. Bounded operational copies, such as backups and delivery queues, expire on their own separate schedules. There is no per-message flag; ephemerality is applied automatically based on your configuration.
The window can be set anywhere from 60 minutes to 24 hours, and defaults to 24 hours. Ask your Linq support contact to configure a shorter window; it cannot be changed through the API.
You can request it at two scopes:
| Scope | Effect |
|---|---|
| Partner-wide | Every outbound and inbound message on every phone number under your account has its content removed from the API surface after your configured window. Metadata is retained. |
| Per phone number | Only the specified phone numbers have message content removed from the API surface this way. The rest follow the standard message-retention policy. |
Behavioral differences vs the standard default:
| Aspect | Standard | Ephemeral |
|---|---|---|
| Retention | Retained per the standard message-retention policy | Hard backstop: your configured window (60 minutes – 24 hours, default 24 hours) from when the message is created |
| After expiry | Message stays retrievable | Message content is no longer retrievable — GET /v3/messages/{messageId} returns 404 and it no longer appears in GET /v3/chats/{chatId}/messages |
| Content on expiry | N/A | Text, formatting, and attachment references are removed from the API surface, not blanked out in place. Metadata (identifiers, timestamps, phone numbers, delivery state) is retained; its retention is not bounded by this window |
| Attachments | Retained | Media sent on the ephemeral attachments tier is removed on its own storage backstop — within roughly 24–48 hours of upload — independently of the message window, so it can outlast a window shorter than a day. Attachments on the persistent tier (including pre-uploads via POST /v3/attachments) are kept until you DELETE them |
| Cross-partner isolation | Enforced | Enforced |
How the retention window works:
- The window runs from message creation (
created_at). It is configured for your account (60 minutes – 24 hours, default 24 hours) and cannot be set per message. - Attachment media follows its own storage backstop rather than the message window — see the Attachments row above.
- Expiry is delivery-independent — the clock starts when the message is created, not when it is delivered or read.
- Deletion happens shortly after the window, not exactly at it. A background sweep runs every ~5 minutes, so a message typically stops being retrievable within about 5 minutes of its expiry, and longer while a backlog is being worked through. Treat the window as the guaranteed minimum retention, never as an exact deletion time or an upper bound.
What you observe:
- No expiry timestamp is exposed. API responses and webhook payloads do not include the deletion time, and they do not report your configured window either — so if you are on a window shorter than 24 hours you cannot derive a message’s expiry from the API today. Track the window you agreed with your Linq support contact and compute
created_at + windowyourself. - No deletion webhook is sent. There is no
message.deletedevent — a message simply stops being retrievable once its window passes. - The attachment backstop is separate from the message window. API retrievability (the
404behavior above) ends at your configured window. Ephemeral-tier media objects are removed on their own storage backstop — within roughly 24–48 hours of upload — which is independent of the message window and can outlast a window shorter than a day. Removal of the corresponding entries from the sending device happens asynchronously and can complete after the backstop. - Delivery is unaffected. Ephemeral messages send, deliver, and fire the usual
message.sent/message.receivedand status webhooks exactly like standard messages. Only retention changes.
When to choose ephemeral:
- You have a compliance requirement that the platform must not retain message content beyond a short window.
- The conversation is high-sensitivity (PHI, financial, identity verification) and you do not want it sitting in storage long-term.
- Your application is the system of record — you capture what you need from the delivery webhook in real time and do not rely on reading message history back from Linq later.
Important: ephemeral applies in both directions — messages you send and messages received by the phone numbers in that scope. Because Linq can no longer return the message once its window passes, persist anything you need to keep from the webhook payload at the time it is delivered.
Send a message to an existing chat
Get messages from a chat
ModelsExpand Collapse
SentMessage { id, created_at, delivery_status, 9 more } A message that was sent (used in CreateChat and SendMessage responses)
A message that was sent (used in CreateChat and SendMessage responses)
DEPRECATED: Use delivery_status == "read" instead. Whether the message has been read.
parts: Array<TextPartResponse { reactions, type, value, 5 more } | MediaPartResponse { id, filename, mime_type, 4 more } | LinkPartResponse { reactions, type, value } | 2 more>Message parts in order (text, media, and link)
Message parts in order (text, media, and link)
TextPartResponse { reactions, type, value, 5 more } A text message part
A text message part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
Stickers placed inside the text, in the order they appear in value. null when the
part has none.
Set on messages sent with inline_stickers. An inline sticker received over iMessage
currently arrives as a separate media part.
Stickers placed inside the text, in the order they appear in value. null when the
part has none.
Set on messages sent with inline_stickers. An inline sticker received over iMessage
currently arrives as a separate media part.
DEPRECATED: Use mentions instead. Handle (E.164 phone number or Apple ID email)
of the first mention on this part. A part may carry several mentions; this
field shows only the first in value order, so it cannot be used to determine
whether a given participant was mentioned. null when the part carries no mention.
DEPRECATED: Use mentions[].range instead. Character range [start, end) in
value highlighted as the first mention only. null when the range was
omitted (the whole value is highlighted) or the part carries no mention.
Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.
mentions?: Array<Mention> | nullEvery mention on this part, in the order they appear in value. null when the
part carries no mention. A part can carry several mentions of different people —
check is_me to tell whether this line was one of them.
Only iMessage carries mentions. On a received message this is populated when the
sender was on iMessage; SMS and RCS have no way to mark a mention, so a message
from an SMS or RCS participant arrives as plain text with mentions null, even in
a group where other participants are on iMessage.
Every mention on this part, in the order they appear in value. null when the
part carries no mention. A part can carry several mentions of different people —
check is_me to tell whether this line was one of them.
Only iMessage carries mentions. On a received message this is populated when the
sender was on iMessage; SMS and RCS have no way to mark a mention, so a message
from an SMS or RCS participant arrives as plain text with mentions null, even in
a group where other participants are on iMessage.
Text decorations applied to character ranges in the value
Text decorations applied to character ranges in the value
Character range [start, end) in the value string where the decoration applies.
start is inclusive, end is exclusive.
Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.
MediaPartResponse { id, filename, mime_type, 4 more } A media attachment part
A media attachment part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
LinkPartResponse { reactions, type, value } A rich link preview part
A rich link preview part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
IMessageAppPartResponse { app, layout, reactions, 3 more } An iMessage app card part.
An iMessage app card part.
app: App { bundle_id, name, team_id, app_store_id } Identifies the iMessage app (Messages app extension) that backs the card.
Identifies the iMessage app (Messages app extension) that backs the card.
layout: Layout { caption, image_subtitle, image_title, 4 more } Visible layout of the card. At least one of
caption, subcaption, trailing_caption, trailing_subcaption, or image_url must be
set, otherwise the card renders as an empty bubble.
image_url displays a preview image at the top of the card. The image renders on the
recipient’s card whether or not they have your app installed. The small icon beside the
caption is the app’s own icon and is not settable here.
* Note - requires a trusted chat w/ inbound activity
image_title and image_subtitle render as text overlaid on the image (title bold, subtitle
beneath it). They only appear when image_url is set — without an image there is nothing to
overlay — so setting either without image_url is rejected.
Visible layout of the card. At least one of
caption, subcaption, trailing_caption, trailing_subcaption, or image_url must be
set, otherwise the card renders as an empty bubble.
image_url displays a preview image at the top of the card. The image renders on the
recipient’s card whether or not they have your app installed. The small icon beside the
caption is the app’s own icon and is not settable here.
* Note - requires a trusted chat w/ inbound activity
image_title and image_subtitle render as text overlaid on the image (title bold, subtitle
beneath it). They only appear when image_url is set — without an image there is nothing to
overlay — so setting either without image_url is rejected.
Text shown below image_title, overlaid on the card image. Requires image_url.
Bold text overlaid on the card image. Requires image_url (rejected without it).
URL of an image (JPEG, PNG, HEIF, or WebP) to display as the card’s preview image; an unreachable or non-image URL returns a validation error. Renders for all recipients regardless of whether they have the app. Note - requires a trusted chat w/ inbound activity. In responses, this is the re-hosted cdn.linqapp.com copy of the image you supplied, not your original URL.
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
AppClipPartResponse { reactions, type, value, 3 more } An App Clip card part
An App Clip card part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
The sender of this message as a full handle object
The sender of this message as a full handle object
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
MessageSendResponse { chat_id, message } Response for sending a message to a chat
Response for sending a message to a chat
A message that was sent (used in CreateChat and SendMessage responses)
A message that was sent (used in CreateChat and SendMessage responses)
DEPRECATED: Use delivery_status == "read" instead. Whether the message has been read.
parts: Array<TextPartResponse { reactions, type, value, 5 more } | MediaPartResponse { id, filename, mime_type, 4 more } | LinkPartResponse { reactions, type, value } | 2 more>Message parts in order (text, media, and link)
Message parts in order (text, media, and link)
TextPartResponse { reactions, type, value, 5 more } A text message part
A text message part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
Stickers placed inside the text, in the order they appear in value. null when the
part has none.
Set on messages sent with inline_stickers. An inline sticker received over iMessage
currently arrives as a separate media part.
Stickers placed inside the text, in the order they appear in value. null when the
part has none.
Set on messages sent with inline_stickers. An inline sticker received over iMessage
currently arrives as a separate media part.
DEPRECATED: Use mentions instead. Handle (E.164 phone number or Apple ID email)
of the first mention on this part. A part may carry several mentions; this
field shows only the first in value order, so it cannot be used to determine
whether a given participant was mentioned. null when the part carries no mention.
DEPRECATED: Use mentions[].range instead. Character range [start, end) in
value highlighted as the first mention only. null when the range was
omitted (the whole value is highlighted) or the part carries no mention.
Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.
mentions?: Array<Mention> | nullEvery mention on this part, in the order they appear in value. null when the
part carries no mention. A part can carry several mentions of different people —
check is_me to tell whether this line was one of them.
Only iMessage carries mentions. On a received message this is populated when the
sender was on iMessage; SMS and RCS have no way to mark a mention, so a message
from an SMS or RCS participant arrives as plain text with mentions null, even in
a group where other participants are on iMessage.
Every mention on this part, in the order they appear in value. null when the
part carries no mention. A part can carry several mentions of different people —
check is_me to tell whether this line was one of them.
Only iMessage carries mentions. On a received message this is populated when the
sender was on iMessage; SMS and RCS have no way to mark a mention, so a message
from an SMS or RCS participant arrives as plain text with mentions null, even in
a group where other participants are on iMessage.
Text decorations applied to character ranges in the value
Text decorations applied to character ranges in the value
Character range [start, end) in the value string where the decoration applies.
start is inclusive, end is exclusive.
Characters are measured as UTF-16 code units. Most characters count as 1; some emoji count as 2.
MediaPartResponse { id, filename, mime_type, 4 more } A media attachment part
A media attachment part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
LinkPartResponse { reactions, type, value } A rich link preview part
A rich link preview part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
IMessageAppPartResponse { app, layout, reactions, 3 more } An iMessage app card part.
An iMessage app card part.
app: App { bundle_id, name, team_id, app_store_id } Identifies the iMessage app (Messages app extension) that backs the card.
Identifies the iMessage app (Messages app extension) that backs the card.
layout: Layout { caption, image_subtitle, image_title, 4 more } Visible layout of the card. At least one of
caption, subcaption, trailing_caption, trailing_subcaption, or image_url must be
set, otherwise the card renders as an empty bubble.
image_url displays a preview image at the top of the card. The image renders on the
recipient’s card whether or not they have your app installed. The small icon beside the
caption is the app’s own icon and is not settable here.
* Note - requires a trusted chat w/ inbound activity
image_title and image_subtitle render as text overlaid on the image (title bold, subtitle
beneath it). They only appear when image_url is set — without an image there is nothing to
overlay — so setting either without image_url is rejected.
Visible layout of the card. At least one of
caption, subcaption, trailing_caption, trailing_subcaption, or image_url must be
set, otherwise the card renders as an empty bubble.
image_url displays a preview image at the top of the card. The image renders on the
recipient’s card whether or not they have your app installed. The small icon beside the
caption is the app’s own icon and is not settable here.
* Note - requires a trusted chat w/ inbound activity
image_title and image_subtitle render as text overlaid on the image (title bold, subtitle
beneath it). They only appear when image_url is set — without an image there is nothing to
overlay — so setting either without image_url is rejected.
Text shown below image_title, overlaid on the card image. Requires image_url.
Bold text overlaid on the card image. Requires image_url (rejected without it).
URL of an image (JPEG, PNG, HEIF, or WebP) to display as the card’s preview image; an unreachable or non-image URL returns a validation error. Renders for all recipients regardless of whether they have the app. Note - requires a trusted chat w/ inbound activity. In responses, this is the re-hosted cdn.linqapp.com copy of the image you supplied, not your original URL.
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
AppClipPartResponse { reactions, type, value, 3 more } An App Clip card part
An App Clip card part
Reactions on this message part
Reactions on this message part
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question.
Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field.
Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Type of reaction. Standard iMessage tapbacks are love, like, dislike, laugh, emphasize, question. Custom emoji reactions have type “custom” with the actual emoji in the custom_emoji field. Sticker reactions have type “sticker” with sticker attachment details in the sticker field.
Identifier for this reaction. Pass it to
PATCH /v3/messages/{messageId}/reactions/{reactionId} to move a sticker.
Stickers placed before this API shipped can be read but not moved: the
device-side reference needed to reposition them was never recorded, so
PATCH returns 404 for those.
The sender of this message as a full handle object
The sender of this message as a full handle object
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
line_type?: "iMessage" | "RCS"The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
The kind of line: iMessage for an iMessage-capable line, RCS for an
RCS-only line, which sends RCS and SMS but never iMessage. Same values as
the type parameter on GET /v3/available_number. A property of the line
itself, so unlike service it does not change with the conversation:
an iMessage-capable line can still carry an RCS or SMS conversation.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.
Messaging service type. Where this names the transport a message used,
it is per-message: a chat’s own service can differ from a message in
it, and Apple can downgrade an individual message.