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
- You provide a PostgreSQL connection URL via the API
- Ingate validates connectivity by test-connecting and pinging
- The URL is encrypted with AES-256 and stored in the central database
- On the next request, Ingate creates a connection pool to your database
- Schema migrations run automatically on first connection
- All subsequent reads and writes for your org use your database
Configure BYOS
PUT
/api/v1/orgs/:org_id/storageSet 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/storageGet 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/testTest-connect to a PostgreSQL URL without storing it.
Remove BYOS
DELETE
/api/v1/orgs/:org_id/storageRemove 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=requireorsslmode=verify-full) - A dedicated database (Ingate manages the schema via migrations)