OpenTranscription
OpenTranscription
Back to app

Service Level Objectives

These are aspirational targets, not contractual commitments. We measure and publish them to set honest expectations and to hold ourselves accountable publicly. Enterprise customers seeking contractual SLAs with service credits should contact sales.

What we measure

API availability

  • Target: 99.9% of API requests return non-5xx responses, measured over a 30-day rolling window.
  • Measurement: BetterStack Uptime probes from multiple regions hitting /api/v1/transcriptions (authenticated probe) and /api/v1/models (unauthenticated probe).
  • Dashboard: https://opentranscription.betteruptime.com
  • Excluded: 4xx client errors, scheduled maintenance, third-party provider outages on BYOK jobs.
<!-- TODO (measurement gap): Configure BetterStack Uptime monitor for /api/v1/models specifically. The deployment checklist §13 configures a monitor for /api/v1/transcriptions but does not include /api/v1/models. -->

API latency

  • Target (most routes): 95% of API requests complete in under 500ms.
  • Target (transcription create): 95% of POST /api/v1/transcriptions requests complete in under 1000ms.
  • Measurement: Sentry Performance captures p50/p95/p99 per route. Existing alert: p95 > 5s on /api/v1/transcriptions → immediate notification.
  • Note: Synchronous API latency only. The time to actually transcribe audio is covered by the transcription latency SLO below.

Transcription success rate

  • Target: 97% of submitted jobs reach status = 'completed' (vs. 'failed'), measured over a 30-day rolling window.
  • Measurement: Rollup query over transcription_jobs table. The ~3% margin covers corrupted audio, unsupported formats, and provider flakes.
  • Excluded: Jobs cancelled by the user (status = 'cancelled') and jobs that fail due to customer-caused errors documented in the error response.
<!-- TODO (measurement gap): Implement rollup query on transcription_jobs and surface on an ops dashboard. Raw data exists today but is not aggregated. -->

Transcription end-to-end latency

  • Target: 95% of completed jobs finish in under 3× the audio duration (e.g., a 60-second audio file transcribes in under 180 seconds 95% of the time).
  • Measurement: (completed_at - created_at) / duration_seconds aggregated over transcription_jobs. Computed nightly, surfaced on the internal ops dashboard.
  • Excluded: Realtime streaming jobs (different latency semantics — see below), jobs queued during platform-level incidents already reported on the status page.

Realtime streaming latency (separate SLO)

  • Target: First transcript chunk delivered within 500ms of the corresponding audio frame, measured at the WebSocket client.
  • Measurement: Client-side instrumentation in useRealtimeTranscription hook; aggregated into model_health.p95_latency_ms for streaming models.

How we measure

Every SLO above maps to an existing observability system. We do not use custom tooling:

  • BetterStack Uptime — external HTTP probes, availability SLI, powers the public status page.
  • Sentry Performance — p50/p95/p99 latency per route, with the existing p95 > 5s alert covering the primary API endpoint.
  • model_health table — per-model latency/success/speed_factor rollups, computed by existing Inngest functions.
  • transcription_jobs table — source of truth for success rate and end-to-end latency rollups.

Error budget policy

An error budget is the inverse of the SLO: if the target is 99.9%, the budget is 0.1% — roughly 43 minutes of downtime per 30 days.

When we burn through 50% of the monthly error budget, we freeze non-critical deploys and focus on reliability work until the budget recovers. When we exhaust the budget entirely, we publish a post-mortem on the status page within 5 business days and commit to a remediation plan.

What this is not

This document publishes SLOs — aspirational targets we hold ourselves to publicly. It does not constitute a contractual SLA. We do not offer service credits for missed SLO targets at the free or standard paid tier.

Enterprise customers seeking contractual SLA commitments with service credits should contact sales. Enterprise SLAs are negotiated per-contract and are tied to dedicated account management, invoicing, and reporting.

Status page

<!-- TODO: Update with actual status page URL once status.opentranscription.io CNAME is provisioned (deployment checklist §14.3). Current URL below is the BetterStack subdomain. -->

Current uptime and incident history: https://opentranscription.betteruptime.com

Changes to this document

We will update these targets as we accumulate operational data. Material changes (tightening or loosening a target) are announced via the changelog and via a status page post 30 days before taking effect.