Roadmap
What already shipped, what Sendo Connect is and isn’t, when it opens, and the channels still to come.
Sendo is a library. Your messages, contacts and media live only in your own database, and that doesn’t change on this page.
Shipped#
These items were on the V2 plan and are now part of @quami/sendo and the registry:
- Embedded Signup:
sendo.accounts.completeEmbeddedSignupand thenumbersitem (Embedded Signup). - Broadcasts and opt-in:
sendo.broadcasts,sendo.contacts.setOptInand thebroadcastsitem (Broadcasts). - Metrics: SQL views,
sendo.metricsand themetricsitem (Metrics). - Drizzle and Prisma adapters:
@quami/sendo/adapters/drizzleand@quami/sendo/adapters/prisma, both passingrunAdapterContract(Adapters). - Voice notes and cost: the
transcribeoption and per-turn cost (Voice notes and cost). - Sendo Connect (package side): the
connectoption, signup through Connect and the doctor checks (Sendo Connect).
Sendo Connect#
Connect is the only paid piece. Quami acts as the Meta Tech Provider for your app, so you can offer “Connect your WhatsApp” without going through Meta’s business verification and app review yourself.
What it is#
- A signed webhook relay. Meta sends webhooks for your numbers to Quami’s relay, which signs each one with your own secret (
X-Sendo-Signature) and posts it to your app. Your app verifies it and fails closed. - A signup API. It completes Embedded Signup with Quami’s Meta app and returns the number’s token to your server once.
- A minimal panel. API key, signing secret, your webhook URL, connected numbers and their billing status.
- Per-number billing. Connect bills per connected number, per month (Pricing). Meta still bills messages to your customer’s WhatsApp Business account.
What it isn’t#
- Not an inbox. The inbox is the
inboxitem in your app, reading your database. - Not a message store. Connect keeps no copy of your messages, contacts or media.
- Not user management. Your staff, roles and tenants stay in your app.
- Not a sending proxy. Your server sends straight to Meta with the token Connect returned at signup. Connect never sends on your behalf and doesn’t keep that token.
It’s a piece, not a platform. Adding connect to createSendo is a configuration change; the package, the migrations and the registry items stay the same.
The privacy cost#
With Connect, your customers’ webhooks pass through Quami before they reach you. That is a third party in the path of every inbound message:
- A webhook body is held encrypted only while its delivery is pending, and deleted on success or when the 24-hour retry window ends.
- Bodies are never logged. Only delivery metadata (timestamp, project, number, status code, attempt count, latency) is kept, for 7 days.
- Quami’s Meta app is the one connected to your customers’ WhatsApp accounts.
If that cost is too high for your data (health, for example), use your own Meta app. Doing Meta’s paperwork yourself stays free and first-class: see Meta setup and Embedded Signup.
When it ships#
The package side already ships in @quami/sendo. Connect accounts open after Meta approves Quami as a Tech Provider; there is no date until that approval arrives. Until then, use your own Meta app.
Planned#
More channels#
WhatsApp is the only channel today. Instagram and Messenger come next: the schema, the webhook dispatch and the inbox already carry a channel, so a new channel is new code in the package, not a migration in your app (Channels). The Transport interface stays swappable for the same reason, so a new channel or a new way to reach Meta doesn’t mean rewriting your app (Transport).
diff CLI#
npx @quami/sendo diff fetches the latest registry items and compares them with your installed files and sendo_schema_meta.version, with a changelog. Until then the package warns at startup when the installed schema is older than it expects.