← Articles
Linq: iMessage, RCS, and SMS from one Partner API logo
linq

Linq: iMessage, RCS, and SMS from one Partner API

· AUG 26, 2026 ·
Read
Share

One bearer token, one REST base. Linq picks the line and protocol unless you pin it. Built for support, reminders, and agents that need to live in Messages — not another SMS-only gateway.

devrels.xyz/a/263

Linq: iMessage, RCS, and SMS from one Partner API. If your product needs to talk to people where they already reply — Apple Messages, Google RCS, or SMS — Linq is a REST layer for that, not a Solana program. This is the builder path from docs.linqapp.com.

Linq: iMessage, RCS, and SMS from one Partner API

What it is

The Partner API lives at https://api.linqapp.com/api/partner/v3. You get a bearer token, one or more provisioned numbers, and (usually) a webhook URL. From there you send chats, media, reactions, typing, polls, even iMessage effects. Incoming events come back as webhooks.

Product site: linqapp.com. They market sandbox signup and a partner token from a Linq rep. Treat access as provisioned, not a public free-for-all key in npm.

Send the first message

Simplest path: POST /v3/messages with recipients and parts. Leave from off. Linq chooses a sending line, reuses an existing chat when it can, and tells you what it did.

bash
# Token from Linq — never commit it
export LINQ_API_KEY="…"

curl -sS -X POST https://api.linqapp.com/api/partner/v3/messages \
  -H "Authorization: Bearer $LINQ_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["+14155550100"],
    "message": {
      "parts": [{ "type": "text", "value": "Hi from the Partner API." }]
    }
  }'

Numbers are E.164 (+1…), no spaces or dashes. The response includes from (the line used), chat_id, created_new_chat, service (e.g. iMessage), and a from_selection.reason such as reused chat, new best number, or failover.

Older examples use POST /v3/chats with an explicit from. That still works when you must pin a line. Prefer messages-without-from when you want Linq to load-balance the pool.

SDKs and agents

Official clients handle auth, retries, types, and idempotency.

  • TypeScript: npm i @linqapp/sdk
  • Python: pip install linq-python
  • Go: go get github.com/linq-team/linq-go
  • CLI: npm i -g @linqapp/cli then linq login --token …

They also ship a coding-agent plugin (Claude Code / Cursor marketplace linq-team/linq-ai) with docs search and an execute tool against your account. Useful once the token works; still read the HTTP surface so you know what the agent is calling.

typescript
import LinqAPIV3 from "@linqapp/sdk"

const client = new LinqAPIV3({ apiKey: process.env.LINQ_API_KEY! })

const chat = await client.chats.create({
  from: "+15555550123",
  to: ["+14155550100"],
  message: { parts: [{ type: "text", value: "Hello from Linq." }] },
})

What the API actually covers

One integration, three protocols. You can let Linq pick or set the service explicitly when you care.

  • Text plus rich media (images, video, docs, voice, contacts; large files up to 100MB in their docs)
  • Groups, threading, tapbacks / custom emoji reactions
  • iMessage effects (confetti, slam, invisible ink, …)
  • Typing indicators, polls, chat backgrounds
  • Delivery and read webhooks; W3C trace ids on requests

That is why agent teams look at it: the model can stay in a normal iMessage thread instead of forcing a custom app install.

Webhooks

Subscribe an HTTPS endpoint. Failed deliveries retry (docs: up to 10 times over ~25 minutes). Deduplicate on the event id.

New deliveries include Standard Webhooks headers: webhook-id, webhook-timestamp, webhook-signature. Legacy X-Webhook-* headers still ship so old verifiers keep working. Signing secrets look like whsec_… — strip the prefix, base64-decode, verify.

Verify signatures before you trust inbound text. An open webhook is an inbound SMS/iMessage forge.

Honest limits

  • This is carrier / Apple messaging infrastructure. It is not on-chain and not a Solana wallet notify layer.
  • Tokens and numbers are provisioned. Budget time for sandbox + compliance, not only curl.
  • iMessage features (effects, tapbacks) will not appear on a pure SMS fallback. Read service on the response.
  • Don’t log full E.164 lists or message bodies in public repos.

People and links

Linq surfaces
WhatWhere
Docsdocs.linqapp.com
Productlinqapp.com
APIhttps://api.linqapp.com/api/partner/v3
GitHubgithub.com/linq-team
X@thelinqapp

Resources

Keep reading

Get new articles in your inbox

Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.

Linq: iMessage, RCS, and SMS from one Partner API | devrels.xyz