Linq’s iMessage Apps Bring Payments, Tickets, Flights, and Games Into the iMessage Bubble Through the imessage_app Part
Linq developers can now build iMessage Apps .

Linq developers can now build iMessage Apps . These are interactive mini-apps that run inside a iMessages conversation.
A user can shop, play a game, book a flight, or pay. None of it requires leaving the iMessage thread. There is no deep link to an external browser. There is no ‘tap here to finish in the app.’
Previously, an agent’s main API option was to send a link. The user then had to follow it somewhere else. iMessage Apps remove that handoff.
An iMessage App is a tappable card that opens an interactive experience in place. The card becomes your app inside the bubble.
Technically, it is a new message part with type: "imessage_app" . This replaces the text , media , and link parts you already use. An installed Messages extension draws the rich content from a url you provide.
Linq is the messaging-infrastructure startup behind the API. Its platform lets AI agents message users over iMessage, RCS, and SMS.
A few details decide whether your first card renders correctly.
The app identity is the rendering key : The app object carries team_id and bundle_id . Those fields tell Messages which extension renders the card. team_id is the app’s 10-character uppercase identifier. You usually pass your own app’s identity.
There is one common failure mode here. An unrecognized identity silently renders as plain text. If team_id and bundle_id do not match an installed extension, the card falls back to your caption. No error is thrown.
You control captions; the app controls the image : The layout object holds the text drawn on the card. There is no image field. The photo, icon, and interactive UI come from your extension.
At least one field must be set. Otherwise the card renders as an empty bubble. Messages treats the url as opaque, so changing the url changes what the card shows.
An interactive flag controls live versus static. It defaults to true . With true , recipients who have your app see the live card. Set it to false to always show the static layout card instead.
Install state and the flag together decide the result. Three outcomes are possible:
Send a card with Create Chat , or post it into an existing chat with Send Message .
Updates are the interesting primitive. A delivered card can be replaced in place by referencing the original message. This is how a game move redraws a board.
Source: MarkTechPost