background
Product

Ship inbox and calendar features without shipping your data.

Riposte runs inside your infrastructure to keep Gmail, Microsoft 365, and IMAP tenants in sync. Launch messaging and scheduling experiences on a unified schema with replayable webhooks and operator tools you already trust.

No shared multi-tenant store. No external vendor touches your content.

Inside your VPC Sovereign sync
Providers Gmail | Microsoft 365 | IMAP
Normalized to
Messages Threads Labels Events Attendees
Webhooks Signed | Replayable | Backoff aware
Message.created Delivered in 1.6s
Event.updated Retrying (budget 2/5)

Own the data

Mail and calendar content never leaves your VPC. Credentials stay in your secrets manager and storage stays in your Postgres.

Operate on your terms

Tune cadence, retry budgets, and concurrency per tenant. Trigger partial replays without opening an engineering ticket.

Ship faster

Unified schemas, typed SDKs, and local emulators remove provider quirks so your team ships product, not glue code.

Normalized schema

Unified data model

What it does

Normalizes provider payloads into clean shapes for Messages, Threads, Labels, Events, and Attendees.

Why it matters

Ship one integration that behaves the same for Gmail, Microsoft 365, and IMAP.

You control

Choose field projections, map IDs, and define label-to-folder behavior per tenant.

Normalize providers One schema
Gmail
Microsoft 365
IMAP
Normalized schema
Messages Threads Labels Events Attendees
Streaming updates

Real-time change delivery

What it does

Delivers webhook events for message and calendar changes with signed payloads, retries, and replay cursors.

Why it matters

Your product reacts instantly without polling or missing bursts.

You control

Filter subscriptions, tune retry budgets, rotate secrets, and replay from any checkpoint.

Webhook stream Signed | Replayable
08:41:12 Message.created
Delivered
08:41:16 Message.updated
Retry scheduled
08:41:23 Event.cancelled
Replay ready
On-demand backfills

Historical syncs on demand

What it does

Backfills accounts by label, date range, or search query with resumable checkpoints.

Why it matters

Pull only what a rollout or migration needs without slowing other tenants.

You control

Set concurrency, checkpoints, and label filters from the admin portal or CLI.

Backfill queue Resumable checkpoints
Inbox 12,418 messages
Complete
Label: finance-2024 3,214 messages
Running
Search: invoice +paid Queued
Queued
Protect quotas

Provider-aware request queuing

What it does

Schedules API calls per account with adaptive backoff to stay ahead of 429 and throttling limits.

Why it matters

Sync jobs stay healthy under load even when providers tighten rate windows.

You control

Define per-tenant budgets, concurrency caps, retry strategies, and dead-letter policies.

Provider queues Adaptive backoff
Gmail Draining

Queue holding 8 requests

Microsoft 365 On schedule

Queue holding 3 requests

IMAP Idle

Queue holding 0 requests

Embeddable UI

Scheduler component

What it does

Ships a customizable booking UI that reads and writes availability through the same sync engine.

Why it matters

Offer scheduling in-product with your branding and policies.

You control

Set buffers, overrides, theming, and approval logic before opening slots.

Booking UI Fully yours
09:00 Booked
09:30 Hold
10:00 Open
10:30 Open
11:00 Blocked

Tooltip: Provider-aware queue is holding 8 requests to respect rate limits

Ops command center

Operations toolkit & admin portal

What it does

Gives support, success, and engineering a shared console for account health, credential rotation, and manual replays.

Why it matters

Resolve incidents without pagers or one-off scripts.

You control

Design roles, guardrails, and audit logs; expose only the surfaces your org needs.

Admin portal Role-based access
Tenant / acme Sync healthy
Audit log -> View trace
Partial backfill Running (3,214 items)
Audit log -> View trace
Credential rotation Queued
Audit log -> View trace

Banner: Partial backfill running for 3,214 items

Health chip: Sync healthy

Extensible pipelines

Extensible data pipelines

What it does

Routes normalized events into your queues, warehouses, or processors with transform hooks.

Why it matters

Keep your existing data stack while Riposte handles provider quirks.

You control

Choose sinks, batch sizes, transforms, and failure handling per destination.

Pipeline hooks Type-safe SDK

pipeline.on('message.created', ({ record }) => {
  queue.push('indexer', normalize(record));
});

pipeline.fanOut(['s3', 'bigquery'], { batch: 500 });
                  
Proof on every sync

Observability & logging

What it does

Emits structured logs, metrics, and traces for every mailbox, job, and webhook delivery.

Why it matters

Know what happened, when, and why without guessing.

You control

Aggregate with OpenTelemetry, Datadog, Honeycomb, or keep everything local with custom sampling.

Observability feed OpenTelemetry ready
Message throughput

4,892 / min

+6.3%

Webhook latency p95

1.8s

-0.4s

Error budget

92% remaining

Healthy

How it fits in your stack

Five steps from account connect to confident operations

Connect

A user links an account inside your product. Riposte finishes the provider handshake inside your boundary.

Store

Minimal refresh material lives in your secrets manager. No middlemen or shared multi-tenant store.

Sync

Provider-aware queues run per-account jobs and write normalized records into your Postgres.

Deliver

Webhooks stream mail and calendar deltas so your services update state in real time.

Operate

Operators monitor health, trigger replays, and launch partial backfills from the admin portal.

Your app
User consent
Riposte queues
Provider-aware
Postgres
Normalized data
Webhook workers
Your code
Admin portal
Ops toolkit

Banner: Partial backfill running for 3,214 items

Alert: Provider-aware queue is holding 8 requests to respect rate limits

Chip: Sync healthy

Requirements

Run it inside your infrastructure

  • Run on Kubernetes, ECS, or a VM you control.
  • Bring your own Postgres or roll out the managed schema that ships with Riposte.
  • Optionally pair with Redis, Pub/Sub, or SQS for queue backends.
Security notes

Keep sovereignty and compliance

  • Integrate with your secrets manager for key storage and rotation.
  • TLS everywhere and encryption at rest stay on by default.
  • All observability and payload data remain inside your boundary.
FAQ

Common questions from teams evaluating Riposte

Still curious? Talk with an engineer and we'll walk through your architecture and timelines together.

Which providers are supported?

Riposte syncs Gmail, Microsoft 365, and IMAP-compatible sources for mail, plus Microsoft 365 and Google Calendar for events.

Can we backfill a subset only?

Yes. Use labels, date ranges, or search queries to scope partial backfills or run targeted replays for new launches.

How do you avoid 429s?

Per-account queues, adaptive backoff, and provider-aware budgets keep throughput high without tripping rate limits.

Can I skin the scheduler UI?

Absolutely. Every surface is themeable—bring your fonts, colors, availability logic, and microcopy.

Where do logs and metrics go?

Your choice. Forward to OpenTelemetry, Datadog, Honeycomb, or keep them local with your own retention windows.

Can my team run manual replays?

Yes. The operations toolkit exposes guarded replay and backfill flows with audit logs so ops can act without engineering.

Do we have to use your database schema?

No. Connect Riposte to your Postgres instance or deploy the managed schema that ships with the platform.

Next steps

Ready to see Riposte in your stack?

Walk through deployment patterns, the data model, and how Riposte plugs into your observability and queues.