Skip to main content

Secret

Encrypted key-value store for sensitive configuration values (API keys, tokens, credentials). Secrets are encrypted at rest using AES-256 and scoped to organizations via a qualified naming convention (org/{organizationId}/{secretName}).

Fields

Field NameTypeDisplay Name
IdInt32Id
SecretNameStringSecret name
EncryptedValueStringEncrypted value
CreatedAtDateTimeCreated at
UpdatedAtDateTimeUpdated at

Database Configuration

  • Table: secrets
  • Primary Key: id
  • Unique Index: ix_secrets_secret_name on secret_name
  • Column Mapping: snake_case (secret_name, encrypted_value, created_at, updated_at)
  • Encryption: AES-256 with per-value random IV prepended to ciphertext, stored as base64

Naming Convention

Secrets use a qualified name format for organization scoping:

org/{organizationId}/{secretName}

For example: org/42/CARRIER_API_KEY

Secret Manager Providers

The system supports pluggable secret manager backends configured via SecretManager:Provider:

ProviderDescription
PostgresPostgreSQL-backed encrypted storage (default)
AzureKeyVaultAzure Key Vault integration
NoneFalls back to Postgres provider

PostgreSQL Provider Configuration

{
"SecretManager": {
"Provider": "Postgres",
"Postgres": {
"EncryptionKey": "<base64-encoded 32-byte key>"
}
}
}

GraphQL API

See Secrets Mutations for the GraphQL API reference.

  • Used by OrganizationConfigService to resolve secret references in organization configuration values