> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developers.deepgram.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developers.deepgram.com/_mcp/server.

# FIPS-Compliant Deployment

> **Info**
>
> Deploying Deepgram on Amazon SageMaker? SageMaker supports AWS FIPS 140-3 endpoints without
> deploying these images yourself. See [Use FIPS Endpoints](/docs/fips-endpoints-sagemaker).

Deepgram provides FIPS 140-3 self-hosted images for the API, Engine, License Proxy, and Billing containers, plus models encrypted using FIPS-approved algorithms.

## Container Images

Use the FIPS variants (the `-fips` tag suffix) of API, Engine, and License Proxy images from a recent self-hosted release. See the [release changelog](/changelog?filter=Self+Hosted) for specific release versions and tags.

## Configuration

### Enable FIPS Mode

FIPS mode is set per service. Add the following block to the configuration file of **every** service you deploy:

```toml
[fips]
mode = "enabled"
```

Set it in each of:

* `api.toml` (API)
* `engine.toml` (Engine)
* `license-proxy.toml` (License Proxy)
* `billing.toml` (Billing — airgapped deployments only)

The FIPS images do not enable FIPS mode on their own. A service whose configuration omits this block runs OpenSSL in standard (non-FIPS) mode, even on a FIPS image.

Confirm each service logs both `openssl_fips_enabled=true` and `has_fips_encryption=true` at startup. `openssl_fips_enabled` reports only that FIPS mode was requested and the OpenSSL FIPS provider loaded, so on its own it does not establish that a service is running FIPS-validated cryptography.

On Kubernetes, the [Deepgram self-hosted Helm chart](https://github.com/deepgram/self-hosted-resources/tree/main/charts/deepgram-self-hosted) renders these configuration files, so set `global.fips.enabled: true` (chart `0.43.0` or later) instead of editing them directly. The chart requires a `-fips` image tag on every deployed component when that value is set.

### Engine Environment Variables

As with any self-hosted Engine deployment, the Engine container requires these NVIDIA environment variables:

```
NVIDIA_VISIBLE_DEVICES=all
NVIDIA_DRIVER_CAPABILITIES=compute,utility
```

These are set in your container orchestration configuration. See the reference configs for [Docker](https://github.com/deepgram/self-hosted-resources/blob/85b1eda4f4f2be3eac18848a8f2dd0d67633563d/docker/docker-compose.license-proxy.yml#L8-L12) and [Kubernetes](https://github.com/deepgram/self-hosted-resources/blob/85b1eda4f4f2be3eac18848a8f2dd0d67633563d/charts/deepgram-self-hosted/templates/engine/engine.deployment.yaml#L145-L151).

### TLS Certificate

Customers must provide their own full-chain PKI certificate for the API's HTTPS endpoint.

## Models

Your Deepgram account team provides download links for the FIPS-encrypted models compatible with these images. FIPS models use the `.dgv2` encrypted file format.

> **Warning**
>
> `.dgv2` and `.dg` models are not interchangeable. The FIPS Engine loads only `.dgv2` models — it will not load `.dg` models.

### Model Support

**Flux STT is not currently supported on FIPS images.** [Flux STT](/docs/flux-self-hosted) can only be run on standard (non-FIPS) images.

**Flux TTS runs on FIPS images.** [Flux TTS](/docs/deploy-flux-tts) is subject to the [MP3 and FLAC output](#mp3-and-flac-output) issue below: batch `/v2/speak` requests return MP3 unless they set `encoding`, so set it explicitly. Streaming `/v2/speak` output is unaffected.

## Caveats

### MP3 and FLAC Output

MP3 and FLAC output are not available on FIPS images. This is a known issue. A text-to-speech request that asks for either format returns `HTTP 200` with an empty body rather than an error.

`/v1/speak` and batch `/v2/speak` both return MP3 when the request does not set `encoding`, so set `encoding` explicitly on FIPS images. Streaming `/v2/speak` returns `linear16` and is unaffected.

Format support on FIPS images:

* `linear16` and `opus` are unaffected, and are the recommended formats.
* `mp3` and `flac` are unavailable.
* Verify any other format against your own deployment before relying on it.

This limitation applies to audio output only. Speech-to-text requests that submit MP3 or FLAC *input* are unaffected.

### TLS 1.3 Only

The FIPS API image enforces TLS 1.3 exclusively. It rejects TLS 1.2 connections outright and rejects non-FIPS cipher suites (such as ChaCha20). Any TLS-1.2-only client, SDK, or proxy in front of the API will fail to connect.

Ensure your entire client stack negotiates TLS 1.3 before cutover.

> **Note**
>
> The `[fips]` configuration flag does not control TLS behavior. TLS 1.3 enforcement is baked into the FIPS image itself, so disabling the `[fips]` flag will not restore TLS 1.2 support.

## Airgapped (Offline) Deployment

The deployment above reaches Deepgram's hosted license server through the License Proxy, which requires outbound internet access. If you require running FIPS-compliant self-hosted Deepgram deployments in environments without public internet connectivity, contact your Deepgram account team to inquire about airgapped access, which uses the FIPS Billing image to run license validation offline.

---

## What's Next

* [Deploy STT Services](/docs/deploy-stt-services) - Standard deployment guide
* [Status Endpoint](/docs/self-hosted-status-endpoint) - Monitor node health and readiness