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.

Integration playbook

Integration lift measured in weeks, not quarters

Run Riposte alongside your stack using container tooling you already trust. The same team that builds your product can deploy, connect providers, and ship features inside a single sprint.

Day 0–1

Provision Riposte in dev

Use Docker Compose or Helm to launch Riposte services, Postgres, and Redis inside your network.

  • Download the deployment templates and pull signed container images.
  • Wire Riposte to your Postgres and Redis instances or spin up ours from Terraform.
  • Expose the admin portal behind your existing identity provider with SSO.
Day 2–4

Connect providers & tenants

Register OAuth apps, rotate secrets through your vault, and onboard a pilot tenant with one command.

  • Use riposte-cli to configure Gmail and Microsoft 365 OAuth with customer-managed credentials.
  • Grant scoped service principals and validate consent via the hosted OAuth screen.
  • Sync a sandbox tenant and monitor health from the portal.
Day 5–10

Ship in-app experiences

Drop the SDKs and scheduler components into your product, then forward normalized webhooks into your queues.

  • Embed Riposte’s React scheduler and OAuth button for customer onboarding.
  • Stream message.created and event.updated into your existing workers.
  • Run targeted backfills to migrate historic conversations before go-live.

Rollout diagram

1

Provision

Docker Compose / Helm

2

Connect

OAuth + secrets manager

3

Launch

SDKs + admin portal

Local quick start

Bash
# Bootstrap Riposte locally
curl -O https://download.riposte.co/docker-compose.yml
docker compose --project-name riposte up -d

# Configure providers with your credentials
riposte-cli providers configure gmail \
  --client-id $GMAIL_CLIENT_ID \
  --client-secret $GMAIL_CLIENT_SECRET
riposte-cli providers configure microsoft365 --tenant-id $AZURE_TENANT
riposte-cli tenants create acme --providers gmail microsoft365
                

Patterns we see ship fastest

  • Embed the OAuth button and scheduler widget directly inside your onboarding flow.
  • Pipe normalized webhooks into your existing event bus or workflow engine.
  • Backfill historical conversations by label before enabling two-way sync.

Day-two operations

  • Delegate replay permissions to support with audit trails for every action.
  • Set per-tenant sync cadence from configuration checked into Git.
  • Export health metrics into Datadog, Honeycomb, or Prometheus alongside your app.

Polish for developer velocity

From SDKs to screencasts, Riposte meets your engineers where they already work so integration never stalls on tooling.

  • Docker Compose bundle for local development and CI smoke tests.
  • Admin portal and CLI both authenticated via your SSO.
  • Environment templates for staging, canary, and production clusters.
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.