Products

Ships to

Developer guideiMessage API6 min read

iMessage opt-in links and QR codes

Get customers to text your Flow iMessage line first with opt-in links and QR codes that open Messages with a prefilled text.

The short answer

Flow turns the reply-first rule into a one-tap start. An opt-in link opens Messages with your line and a prefilled text, so a visitor becomes a live conversation your agent can answer. Put it on your site, receipts, emails and QR codes.

Building on the iMessage API? Build on iMessage with Flow: one agent for iMessage, WhatsApp and Telegram. New to it? Read the iMessage API guide.

The reply-first problem

Without the outbound add-on, a Flow iMessage line replies to people who wrote first. Even with outbound, consent happens in Messages: the customer opts in by texting the line. A checkbox on a website, or consent given on another channel, does not count. For an agent that answers customers, that is a good rule, because it keeps the line from looking like a spammer. It also means somebody has to tap first.

iMessage API rate limits and sending rules explains why lines are protected like this. This post is about the practical side: how to get people to write.

Every Flow iMessage line comes with an opt-in link and a QR code. The link opens Messages with the line’s number filled in and a prefilled text. The person only has to send it, and the conversation exists. In the API, a sender’s address.link is its opt-in link.

You can read it with a live key:

curl "https://api.flow.engineer/v1/senders?channel=imessage" \
  -H "Authorization: Bearer $FLOW_MESSAGING_KEY"

The sender in the answer carries address.link. For comparison, on the Telegram sandbox the link is https://t.me/<bot>?start=<code>, and for WhatsApp it is https://wa.me/.... See Flow’s senders docs.

Where to put it

Anywhere a customer already is and might want to talk:

  • Your website. A “Text us” button on product, booking and support pages.
  • Receipts and order emails. “Questions about this order? Text us.”
  • Confirmation screens after a booking or purchase.
  • A QR code on packaging, a table card, a shop window or a printed flyer. A scan opens Messages with the line.
  • Email footers and signatures.
  • Support pages, next to the phone number.

Make the text on the button say what happens: “Text us on iMessage” beats “Contact”. Put the link behind a button that looks the same on iPhone and everywhere else, and for non-Apple devices offer another channel such as WhatsApp or Telegram. The one-agent guide shows how one handler serves all three.

How Apple Messages for Business does it

Apple’s official business channel works the same way in spirit: the customer starts the conversation. Apple’s FAQ lists these entry points: your website or mobile site, your iOS or iPadOS app, email marketing, QR codes and NFC tags, your Apple Maps listing, a registered business phone number through Message Suggest, and Wallet passes.

That is a different service with its own approval and rules. See Apple Messages for Business vs iMessage API. An opt-in link is for a line from a provider.

Make the first message count

The prefilled text is the first thing your agent receives. Two tips:

  • Make it specific. “Hi, I have a question about my order” gives the agent a topic. A blank message does not.
  • Tell the agent where it came from. Different links on different pages can carry different prefilled text, so your agent knows the context without asking.

Then greet the person quickly, with typing on, and answer in short bubbles. Tapbacks, typing and effects covers the details that make an agent feel native. Consent rules vary by country and use case, so ask your own lawyer, and honour a stop request at once.

Frequently asked questions

What is an iMessage opt-in link?

A link that opens the Messages app with your iMessage line already filled in and a prefilled text ready to send. The person taps send, which starts the conversation, and your agent can then reply.

Why do I need one?

Without the outbound add-on, Flow's iMessage line only replies, so a person must write first. Consent also happens in Messages: opting in means texting the line. A link and a QR code make it easy for customers to do that.

Where do I get the link on Flow?

A sender's address.link, from GET /v1/senders?channel=imessage with a live key. For an iMessage line it is the opt-in link, and it is set only when the line has one configured.

Can I put the link in a QR code?

Yes. A QR code that encodes the link works on printed material, packaging and screens. A scan opens Messages with the line and the prefilled text.

Is it the same as Apple Messages for Business entry points?

No. Messages for Business is Apple's official business channel, with its own entry points on websites, apps, Maps and more. An opt-in link is for an iMessage line from a provider.

Do opt-in links help with consent?

They make the person's action explicit, because they start the conversation themselves. Consent rules depend on your country and use case, so check the rules that apply to you.

Start hereiMessage API: a developer’s guideThe overview of how iMessage APIs work, and what to ask a provider. Developer guideSend iMessage programmaticallycurl, TypeScript and Python: get a key, receive a signed webhook, reply once and handle retries.Developer guideiMessage API without a MacWhy a hosted iMessage API removes the Mac, what the DIY relay costs you, and how to choose.Developer guideiMessage MCP serverTwo things people mean by it: a messaging MCP for your coding agent, and your product as an MCP server.Developer guideiMessage API for Node.js and TypeScriptInstall the SDK, stream inbound messages, verify signed webhooks in Express and reply safely.Developer guideiMessage API for PythonStream inbound events, verify signed webhooks in FastAPI and reply with idempotency keys.Developer guideiMessage API for GoPoll events, reply and verify signed webhooks with the standard library, no SDK needed.

All posts: the Flow blog. The Flow docs have the reference.

From reading to building

Your agent, on iMessage and everywhere else.

Flow gives your agent an iMessage line, and the same code answers on WhatsApp and Telegram and works as an MCP server and CLI. See how it works on iMessage.

Build on iMessage with Flow