App Clips, iMessage Apps (app extensions), and rich links are easy to confuse. Here's exactly what each one is, when to use it, and how to send App Clips and iMessage Apps over an API.

An App Clip is a small part of an app that Apple lets a user launch instantly, without downloading the full app from the App Store. In the Messages app, an App Clip arrives as a native card showing the app icon, name, and an Open button. Tapping it launches the instant experience right away, so the recipient can do something useful, such as order, pay, book, or view, in seconds.
The key trait of an App Clip is that nothing needs to be installed. It's designed for zero-friction moments where asking someone to download and set up an app would kill the interaction. App Clips are gated by Apple per region and OS version; if a clip isn't available on the recipient's device, the card gracefully falls back to the App Store listing.
Under the hood an App Clip is just an https launch URL, either Apple's canonical launcher (https://appclip.apple.com/id?p=<bundleID>) or an app's own associated-domain App Clip link.
An iMessage app is a full app extension that runs inside the Messages app. This is the technology behind things like GamePigeon, sticker packs, and collaborative mini-apps. When you send one, recipients who have your app installed see and interact with its live overlay directly in the conversation (games they can play, forms they can fill in, content they can build together).
The catch is the opposite of an App Clip: an iMessage app requires the recipient to already have your app installed to get the interactive experience. Recipients who don't have it see a native template card (built from a caption and image) plus Apple's built-in App Store fallback, so the message never looks broken, it just isn't interactive for them.
An iMessage app is identified by its bundle id and your Apple Developer Team ID, and it carries an app-state URL that the extension reads when tapped to reconstruct the right state on the recipient's device.
Both put a rich, tappable bubble in an iMessage conversation, and both fall back to the App Store when they can't run. The differences come down to installation, where the code runs, and what the experience is for:
url, or a bundle_id that expands to Apple's launcher.bundle_id + team_id + an app-state url, with an optional caption, app name, and image for the fallback card.There's a third option people reach for when they mean "open something": a rich link. A rich link is a tappable link bubble. If the URL is a universal link for an app the recipient already has installed, tapping it deep-links straight into that app (for example, opening a specific screen). Use a rich link when the app is already downloaded and you just want to jump the user to the right place.
Both App Clips and iMessage apps are native iMessage bubbles, so they're available on Blooio peer-to-peer iMessage channels. You send them through the same v4 message endpoint, just with a different bubble object in the body. Full details and every field are in the custom bubbles guide.
Provide either a ready-made App Clip launch url or the bundle_id convenience field, which Blooio expands into Apple's canonical launcher. If both are given, url wins.
curl -sS -X POST 'https://api.blooio.com/v4/channels/{channel}/messages' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"to": "+1234567890",
"app_clip": {
"bundle_id": "com.example.app.Clip",
"title": "Book your slot"
}
}'Prefer to pass Apple's launcher URL directly? Send it as url instead:
{
"to": "+1234567890",
"app_clip": {
"url": "https://appclip.apple.com/id?p=com.example.app.Clip"
}
}Identify your extension with bundle_id + team_id, and pass the app-state url your extension reads on tap. The optional caption, app_name, and image_url build the fallback card shown to recipients who don't have the app.
curl -sS -X POST 'https://api.blooio.com/v4/channels/{channel}/messages' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
--data '{
"to": "+1234567890",
"imessage_app": {
"bundle_id": "com.acme.app.MessagesExtension",
"team_id": "EWFNLB79LQ",
"app_name": "8 Ball",
"caption": "Let'\''s play 8 Ball!",
"url": "https://your-app.example.com/?game=pool&id=HnjDULcXPJak"
}
}'To open a specific screen in an app the recipient already has, skip App Clips and send a rich link with that app's universal link:
{
"to": "+1234567890",
"rich_link": {
"url": "https://your-app.example.com/orders/12345",
"title": "View your order"
}
}Blooio's v4 API lets you send App Clips, iMessage apps, rich links, and every native bubble on real peer-to-peer iMessage.
Get started
Sending a single message is straightforward. Ensuring reliable delivery of millions of messages presents a significant engineering challenge.

If your business relies on SMS, message delivery is more challenging than ever. Carriers use advanced methods to detect spam and noncompliant traffic. Businesses that don't follow A2P 10DLC rules risk having messages filtered, delayed, or blocked.

On August 5, 2026, Sendblue disclosed a security incident: unauthorized access to conversation records via a Firebase security-rules vulnerability. Here's what Sendblue reported, the data involved, and how to evaluate your iMessage API provider.