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...

Flows

Forms that open inside the chat

Build WhatsApp Flows for bookings, sign-ups and surveys. Send them from any number and get the answers as typed events.

Screens in one Flow
50
Components per Flow
1,000
Flow JSON per draft
2 MB
Prefilled data per send
16 KiB

Build

Catch the broken route before a customer does.

One draft serves Cloud API and Linked Devices projects. Validation, a local preview and JSON round trips come with it.

Validation. Duplicate screen IDs, missing routes, duplicate fields and size limits show before you save.
Recipient preview. Inputs, dropdowns, radio and checkbox groups, date pickers, opt-ins and links render as the customer sees them.
Your JSON, kept. Import and export Flow JSON. Unknown fields and the version string stay as you wrote them.

Send and receive

From any number, back as data.

Publish once on a Cloud API number, then send the Flow from every number in the project. Answers arrive typed.

Send from any number. Linked Devices numbers send published Flows too, with the same content.flow request.
Answers as events. Native webhooks carry nativeFlowResponse. Meta-format webhooks keep interactive.nfm_reply.
Publish to Meta. Upload, publish, deprecate or discard on a Cloud API number, and sync its state back.Cloud API
A data endpoint. Forward requests to your URL, run a Function or bring your own key. Polymorfa manages the encryption key and never stores the contents.Cloud API

In your code

Flows from your own code.

Save drafts, send Flows and read answers from the SDK, the CLI or plain HTTP.

flows.ts
import { Client } from "@polymorfa/sdk";

const platform = new Client({
  credential: { type: "organizationApiKey", value: apiKey },
});

const flows = platform.project("PROJECT_ID").flows;
const { data: draft } = await flows.create({
  name: "Booking",
  definition: bookingFlowJson,
});

API surface

The Flows API.

Reads need sessions:read and changes need sessions:manage. The TypeScript SDK wraps every route below.

Drafts

  • GET/platform/flowsList the project's Flows
  • POST/platform/flowsCreate a draft
  • PATCH/platform/flows/{flowId}Update a draft
  • DELETE/platform/flows/{flowId}Delete a draft

Publishing

  • POST/platform/flows/{flowId}/uploadUpload to a Cloud API number
  • POST/platform/flows/{flowId}/publishPublish the uploaded Flow
  • POST/platform/flows/{flowId}/deprecateRetire a published Flow
  • PUT/platform/flows/{flowId}/endpointSet the data endpoint
  • POST/platform/flow-encryption-keys/rotateRotate the encryption key

Sending and events

  • POST/messaging/{session}/messages/sendSend with content.flow
  • Eventmessage.receivedA completed Flow, as native_flow_response

Start with a free number

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