Enterprise

Bring Your Own Storage

Connect your own PostgreSQL database for complete data sovereignty. Your logs, prompts, and evals stay in your infrastructure.

Enterprise feature

BYOS is available on Enterprise plans and requires admin role to configure.

Overview

By default, Ingate stores all data (logs, prompts, evals) in the Ingate-hosted database. With BYOS, you provide your own PostgreSQL instance. Ingate transparently routes all data operations for your organization to your database.

How It Works

  1. You provide a PostgreSQL connection URL via the API
  2. Ingate validates connectivity by test-connecting and pinging
  3. The URL is encrypted with AES-256 and stored in the central database
  4. On the next request, Ingate creates a connection pool to your database
  5. Schema migrations run automatically on first connection
  6. All subsequent reads and writes for your org use your database

Configure BYOS

PUT
/api/v1/orgs/:org_id/storage

Set or update the BYOS PostgreSQL URL.

bash
curl -X PUT https://api.ingateai.com/api/v1/orgs/{org_id}/storage \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{"postgresql_url": "postgres://user:pass@your-db.example.com:5432/ingate?sslmode=require"}'

The URL is validated before storage. Ingate connects, pings, and reports the latency:

jsonResponse
{
  "configured": true,
  "postgresql_url": "postgres://user:***@your-db.example.com:5432/ingate?sslmode=require",
  "ping_ms": 12
}

Check Status

GET
/api/v1/orgs/:org_id/storage

Get current BYOS configuration and connectivity status.

jsonResponse
{
  "configured": true,
  "postgresql_url": "postgres://user:***@your-db.example.com:5432/ingate?sslmode=require",
  "status": "connected",
  "ping_ms": 12
}

Test Before Committing

POST
/api/v1/orgs/:org_id/storage/test

Test-connect to a PostgreSQL URL without storing it.

Remove BYOS

DELETE
/api/v1/orgs/:org_id/storage

Remove BYOS config. Org reverts to Ingate-hosted storage.

Data migration

Removing BYOS does not migrate data from your database back to Ingate-hosted storage. Existing data remains in your database; new data is written to Ingate-hosted storage.

Connection Management

  • Per-org pools are lazily created on first request and cached in memory
  • Pools are health-checked on every request with automatic reconnection on failure
  • Idle pools are evicted after 10 minutes to conserve resources
  • Maximum 5 connections per org pool (configurable)

Requirements

  • PostgreSQL 14 or later
  • Network connectivity from Ingate to your database (whitelist Ingate IPs)
  • SSL recommended (sslmode=require or sslmode=verify-full)
  • A dedicated database (Ingate manages the schema via migrations)