
Bring email and calendar sync in-house.
const messages = await riposte.messages.list({
accountId: "[email protected]"
});
Deploy Riposte in your own cloud, connect to Gmail + Microsoft + IMAP accounts, and stream normalized data into your app without ceding control.
GET /v1/messages/msg_9012
A single normalized payload across Gmail and Microsoft 365 tenants.
{
"id": "msg_9012",
"subject": "Reminder: Kickoff call tomorrow",
"from": {
"name": "Aditi Rao",
"email": "[email protected]"
},
"to": [
{
"name": "Riposte Ops",
"email": "[email protected]"
}
],
"body": {
"preview": "Hi team — can’t wait for our kickoff call tomorrow at 10am ET.",
"text": "Hi team,\n\nQuick reminder that our kickoff call is tomorrow at 10am ET. Ping me if you need the dial-in again.\n\nThanks,\nAditi"
},
"received_at": "2025-02-03T14:22:17.218Z"
}
A unified platform for messaging and scheduling
Riposte's patent-pending self-hosted sync system normalizes Gmail and Microsoft 365 data, keeps it fresh with resilient workers, and exposes consistent APIs for your product.
- Normalized schemas for messages, threads, labels, events, and attendees.
- Real-time webhooks with replay controls and delivery analytics.
- Admin tooling for monitoring credentials, sync states, and message processing.
Set up Riposte in minutes
- Guided CLI provisions OAuth apps, secrets, and webhooks in your project.
- Runs as an internal API on your server. Connect it to Postgres or SQLite (zero config)
- Typed SDK handles auth redirects, token refresh, and normalized APIs.
Initialize, authorize, and fetch messages fast
Run the CLI, guide users through consent, and request inbox data without boilerplate.
npm install @riposte.co/server
npx riposte-init # Takes you through setup
import Riposte from "@riposte.co/sdk";
const client = new Riposte({ token: process.env.RIPOSTE_TOKEN });
// Will take the user through auth flow automatically
app.get("/connect", async (req, res) => {
res.redirect(authUrl)
});
app.get("/my-emails", async (req, res) => {
const messages = await client.messages.list({
accountId: req.user.connectedEmail,
})
res.json({ messages })
});
Stack overview
How Riposte fits inside your stack
Run the Riposte daemon alongside your services so your internal APIs stay in control. Your UI talks to your own backend, which delegates provider auth and sync to the Riposte client.
Riposte runs as an internal API. The client bridges out to Gmail, Microsoft 365, and IMAP while the rest of your stack stays behind the firewall.
Run Riposte where your data already lives.
Install Riposte alongside the rest of your stack with Kubernetes, ECS, or bare metal. The platform plugs into your logging, metrics, and secrets managers on day one.

Everything you need to operate mission-critical sync.
Isolate each tenant with dedicated credentials, encryption keys, and audit trails.
Tune polling windows, historical catch-up, and label filters per account.
Automated retries, dead-letter queues, and replay tools keep delivery on track.
Centralized observability with searchable logs and account health dashboards.
Bring your own queues—Redis, Pub/Sub, or SQS—for elastic scaling.
Extensible hooks for custom processing pipelines and data warehousing.
Prove value without compromising control.
Riposte handles the undifferentiated heavy lifting so your team can ship product. Focus on customer experience while we keep data flowing securely.
70%
Less engineering overhead
Launch inbox and calendar integrations months faster with production-ready sync primitives.
3x
More accounts per engineer
Operational automations and alerts keep teams lean while customer volume grows.
24/7
On-call ready
Health checks and actionable logs keep global teams ahead of customer-impacting issues.
Run Riposte in your cloud.
Deploy the platform in Kubernetes, ECS, or bare metal and keep every message and calendar event inside your security boundary.