Builders Program

Build with us for a whole month. Unlimited usage and add-ons, weekly calls and your own Slack channel.

Learn more
Polymorfa

Command Palette

Search for a command to run...

QuickLink

One link connects their own number

Stop walking customers through pairing. Create a hosted link with one API call and send it. They confirm their number, connect by QR code, pairing code or Embedded Signup, and the number joins your project.

Ways to connect: QR, pairing code, Embedded Signup
3
How long a link stays open
Until used
Statuses you can poll
6
Page languages, English and Portuguese
2

How it works

No pairing screen to build.

Polymorfa hosts the page that confirms the phone and runs the pairing. Your code creates the link and reads the result.

  1. Create the link. One call returns a URL that stays open until the number connects or you cancel it.
  2. They connect. The phone holder confirms the number, then scans a QR code, types a pairing code or completes Embedded Signup.
  3. You get the number. It joins your project. The link reads connected, the page returns to your success URL and session.connected fires.

Browser Tunnel

Pairing from their own network.

WhatsApp checks the network a new linked device pairs from, and data-center addresses can fail that check. QuickLink sends the pairing handshake through the recipient's browser, so it leaves from their connection.

The handshake leaves from their connection
  • Works for QR codes and pairing codes
  • The browser relays encrypted frames and never holds the keys
  • Nothing to install for the person pairing

Routes you allow

Choose the route, or let them choose.

Set a preferred connection per link, and whether it is only a preference or the one route allowed.

Prefer or force a route. The preferred route shows first and larger. Force it and the page opens that route directly, with no choice to make.
Official numbers through Embedded Signup. Customers connect their own Meta Cloud API number and pay Meta directly for messaging. With Coexistence they keep the WhatsApp Business app, and chat history arrives as webhook events.

Your rules

The right number, on your page.

Lock the expected phone, test without a real number, brand the page and send people back to your app.

Lock the expected phone. Prefill the number and turn off phone changes. Any other account fails with phone_mismatch, even after a QR scan. Brazilian mobile numbers match with or without the ninth digit.
Test-number links on Free. The same hosted flow connects a simulated number. The recipient sees it is simulated, and you choose up to three fields they may edit.
Your brand, in their language
  • Business name, headline, logo, accent, theme and corners
  • English or Brazilian Portuguese, from the browser language
  • Branded QuickLink removes Powered by Polymorfa and uses your own Meta app
Callbacks with a reason. The page returns to your success or failure URL with the status and reason. Confirm with a status read or the session webhooks.

In your code

Onboarding in a few lines.

Create the link where your onboarding already happens, then react when the number connects. Real numbers need a Pay-As-You-Go team. Test-number links work on Free.

connect.ts
import { MessagingClient } from "@polymorfa/sdk";

const messaging = new MessagingClient({
  credential: { type: "apiKey", value: process.env.POLYMORFA_KEY! },
});

const created = await messaging.quickLinks.create(
  {
    projectId,
    externalId: "crm-account-42",
    configuration: {
      prefillPhone: "+5511912345678",
      connectionPreference: "linked",
      connectionEnforcement: "prefer",
      methods: ["qr", "pairing"],
    },
  },
  { idempotencyKey: "connect-crm-account-42" },
);

await sendToAccountOwner(created.data.data.url);

API surface

The QuickLink API.

Creating, reading and cancelling links needs quicklink:manage. Page text, branding and callbacks are saved settings on the Platform API.

Links

  • POST/messaging/quicklinksCreate a link for one number
  • GET/messaging/quicklinks/{id}Read its status
  • DELETE/messaging/quicklinks/{id}Cancel it
  • GET/messaging/quicklinks/availabilityCheck whether a number can add a connection
  • POST/messaging/{session}/cloud-credentials/reauthorizeRenew Meta credentials with a new link
  • PUT/platform/quicklinkSave page text, branding and callbacks

Webhook events

  • Eventsession.connectedThe new number is online
  • Eventsession.statusThe number's connection changed
  • Eventhistory.syncChat history from the connected number
  • Eventcustomer.pairing_link.connectedA customer's pairing link connected

Start with a free number

Your first real number is free. Add more numbers on Pay-As-You-Go.