WhatsApp powers more business conversations than email in most of the world we ship to. The platform that hosts those conversations, unfortunately, is fragmented. Some teams plug into the official Meta Cloud API and pay per template message. Some teams build on linked-device clients and trade rate limits for flexibility. Some teams run both, glued together with crontabs and a nervous on-call rotation.
Titan is one API across all of them. REST for the application code you already write, MCP for the AI agents you wish you could trust, and an embedded signup widget so your customers can connect a number in under a minute without leaving your product.
This post is the short version of what we are building, who it is for, and what we have not yet shipped.
What Titan is
A multi-tenant WhatsApp platform with three surfaces over the same session model.
REST. Every WhatsApp primitive is mapped 1:1 to a typed endpoint. Send messages, manage templates, fetch profiles, listen to webhooks, exchange media. Idempotent where it matters, paginated where the data is unbounded, and consistent across the Cloud API and linked-device backends so a payload that works against one works against the other.
MCP for AI agents. 76 tools over Model Context Protocol. Point Claude, GPT, or any MCP-compatible client at the server and your agent can read a thread, draft a reply, schedule a campaign, or look up an order — with auth, pagination, and tool schemas generated from the live API. No prompt-engineered glue code, no JSON-Schema-as-a-string.
Embedded signup. A drop-in <TitanConnect /> React component (and
plain HTML, Laravel, WordPress, React Native, PHP variants) that handles
the QR scan, pairing-code entry, and Cloud API signup flows behind
OAuth 2.1 with PKCE. Your customers' WhatsApp sessions live in their
own Titan tenant, scoped to your application's client_id, and
revocable from their console. You never hold an admin key.
A six-line example
The smallest useful program — send a message:
import { Titan } from '@titan/sdk'
const titan = new Titan({ apiKey: process.env.TITAN_KEY! })
await titan.sessions.messages.send('my-session', {
to: '5511999999999',
type: 'text',
text: { body: 'Hello from Titan.' },
})
That's it. The same call works against a Cloud API number and a linked-device session. Switch backends in the console; the calling code doesn't move.
Why we built it
The honest answer: because every team we have shipped against ended up with the same shape of WhatsApp adapter — half-finished, brittle, and quietly handling more business-critical traffic than its lines-of-code suggested. Buying a hosted version was an option, but the hosted options either lock you into Meta's pricing, lock you out of features that exist on linked-device clients, or charge per active number with no way to mix tiers across a fleet.
Titan is the version of that adapter we wished existed. One API. Both backends. Per-number pricing. Self-host or managed, your call.
What we are not yet
We are not publicly launched. The full marketing site, the public console, and signups are paused while we complete a legal and compliance review ahead of opening up. The API itself is running in production for design partners, but we are deliberately not adding new tenants until that review lands.
If you want a sense of what the API surface looks like today, the
docs are open at docs.usetitan.app and the SDKs are buildable from
source. Public-launch invites will go out from hello@usetitan.app
once we have the green light.
What's next
The next post will be a deeper dive into the session abstraction — why it is the load-bearing primitive in Titan, how it stays consistent across both backends, and what it lets you build that a per-message API would not. After that, an MCP-from-first-principles post: what 76 tools actually feels like, how we paginate large threads inside a context window, and the surprising things AI agents do with WhatsApp when you give them the keys.
Subscribe to the GitHub releases or follow @usetitan to know when those drop.
Titan is built by a small team in São Paulo and Lisbon. Hello at hello@usetitan.app.