Skip to content

Configuration Keys

This page lists every configuration section and Options class provided by Granit packages. Developers should use it as the canonical lookup when adding or overriding configuration keys.

All Granit configuration sections live under a flat key that matches the module name. Most classes declare a public const string SectionName used in the binding call. Nested sections use the colon separator (e.g. Cache:Redis, Notifications:Email).

Typical binding in a module:

services.Configure<ObservabilityOptions>(
configuration.GetSection(ObservabilityOptions.SectionName));

The .NET configuration system merges sources in order of precedence (last wins):

  1. appsettings.json — base defaults, committed to the repository.
  2. appsettings.{ASPNETCORE_ENVIRONMENT}.json — environment overrides (Development, Staging, Production).
  3. Environment variables — deployed via Kubernetes ConfigMaps or container orchestrators.
  4. HashiCorp Vault (via Granit.Vault) — secrets and dynamic credentials injected at startup.

.NET maps configuration keys to environment variables using the double underscore (__) separator in place of ::

appsettings pathEnvironment variable
Cache:Redis:ConfigurationCache__Redis__Configuration
Observability:OtlpEndpointObservability__OtlpEndpoint
Notifications:Email:ProviderNotifications__Email__Provider
BlobStorage:ServiceUrlBlobStorage__ServiceUrl

For arrays, use the index as a key segment:

Terminal window
Wolverine__RetryDelays__0=00:00:05
Wolverine__RetryDelays__1=00:00:30

KeyTypeDefaultDescription
Section(none — configured in code)
PackageGranit.Timing
DefaultTimezonestring?nullIANA timezone (e.g. Europe/Brussels). null = no conversion, dates remain UTC.
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Guids
DefaultSequentialGuidTypeSequentialGuidType?nullnull = SequentialAsString (PostgreSQL-optimized).

Authentication (JWT Bearer) — JwtBearerAuthOptions

Section titled “Authentication (JWT Bearer) — JwtBearerAuthOptions”
KeyTypeDefaultDescription
SectionAuthentication
PackageGranit.Authentication.JwtBearer
Authoritystring""OIDC authority URL.
Audiencestring""Expected JWT audience.
RequireHttpsMetadatabooltrueRequire HTTPS for OIDC metadata.
NameClaimTypestring"sub"Claim mapped to IIdentity.Name.
BackChannelLogout:EnabledboolfalseEnable OIDC back-channel logout.
BackChannelLogout:EndpointPathstring"/auth/back-channel-logout"Logout endpoint route.
BackChannelLogout:SessionRevocationTtlTimeSpan01:00:00How long revoked session IDs stay in cache.

Keycloak authentication — KeycloakOptions

Section titled “Keycloak authentication — KeycloakOptions”
KeyTypeDefaultDescription
SectionKeycloak
PackageGranit.Authentication.Keycloak
Authoritystring""OIDC authority URL.
ClientIdstring""Keycloak client ID.
ClientSecretstring""Client secret (load from Vault).
RequireHttpsMetadatabooltrueRequire HTTPS for OIDC metadata.
Audiencestring?nullExpected audience. Defaults to ClientId.
AdminRolestring"admin"Keycloak realm role for admins.
RoleClaimsSourcestring"realm_access""realm_access" or "resource_access".

Entra ID authentication — EntraIdOptions

Section titled “Entra ID authentication — EntraIdOptions”
KeyTypeDefaultDescription
SectionEntraId
PackageGranit.Authentication.EntraId
Instancestring"https://login.microsoftonline.com/"Azure AD instance URL.
TenantIdstring""Azure AD tenant ID.
ClientIdstring""App registration client ID.
RequireHttpsMetadatabooltrueRequire HTTPS for OIDC metadata.
AdminRolestring"admin"Admin App Role name.
KeyTypeDefaultDescription
SectionCognito
PackageGranit.Authentication.Cognito
UserPoolIdstring""Cognito User Pool ID.
ClientIdstring""Cognito app client ID.
Regionstring""AWS region (e.g. eu-west-1).
KeyTypeDefaultDescription
Section(configured via authentication scheme)
PackageGranit.Authentication.ApiKeys
CacheDurationTimeSpan00:05:00Cache TTL for API key lookups. TimeSpan.Zero to disable.
TrackLastUsedbooltrueUpdate LastUsedAt on each request.

API key endpoints — ApiKeysEndpointsOptions

Section titled “API key endpoints — ApiKeysEndpointsOptions”
KeyTypeDefaultDescription
SectionApiKeysEndpoints
PackageGranit.Authentication.ApiKeys.Endpoints
RoutePrefixstring"api-keys"Route prefix.
TagNamestring"API Keys"OpenAPI tag.
RequiredRolestring"granit-apikeys-admin"Fallback authorization role.
AllowedEnvironmentsstring[]["live","test","dev"]Allowed environments for key creation.

Authorization — GranitAuthorizationOptions

Section titled “Authorization — GranitAuthorizationOptions”
KeyTypeDefaultDescription
SectionAuthorization
PackageGranit.Authorization
AdminRolesstring[]["admin"]Roles that bypass all permission checks.
CacheDurationTimeSpan00:05:00Permission check cache TTL.
AlwaysAllowboolfalseSkip permission checks entirely (dev only).

Authorization endpoints — AuthorizationEndpointsOptions

Section titled “Authorization endpoints — AuthorizationEndpointsOptions”
KeyTypeDefaultDescription
SectionAuthorizationEndpoints
PackageGranit.Authorization.Endpoints
RoutePrefixstring"auth"Route prefix.
TagNamestring"Authorization"OpenAPI tag.
KeyTypeDefaultDescription
SectionVault
PackageGranit.Vault.HashiCorp
Addressstring""Vault server URL.
AuthMethodstring"Kubernetes""Kubernetes" or "Token".
Tokenstring?nullVault token (dev only).
KubernetesRolestring"my-backend"K8s auth role.
KubernetesTokenPathstring/var/run/secrets/.../tokenPath to K8s service account JWT.
DatabaseMountPointstring"database"Database engine mount point.
DatabaseRoleNamestring"readwrite"Dynamic credential role.
TransitMountPointstring"transit"Transit engine mount point.
LeaseRenewalThresholddouble0.75Lease renewal at 75% of TTL.
KeyTypeDefaultDescription
SectionEncryption
PackageGranit.Encryption
PassPhrasestring""AES key derivation passphrase (from Vault).
KeySizeint256AES key size in bits.
ProviderNamestring"Aes""Aes", "Vault", or "AzureKeyVault".
VaultKeyNamestring"string-encryption"Transit key name (when provider is Vault).
KeyTypeDefaultDescription
SectionVault:Azure
PackageGranit.Vault.Azure
VaultUristring""Azure Key Vault URI (e.g. https://my-vault.vault.azure.net/).
EncryptionKeyNamestring"string-encryption"Key name for encrypt/decrypt operations.
EncryptionAlgorithmstring"RSA-OAEP-256"Algorithm: RSA-OAEP-256, RSA-OAEP, or RSA1_5.
DatabaseSecretNamestring?nullSecret name for DB credentials. Omit to disable credential rotation.
RotationCheckIntervalMinutesint5Secret version polling interval (minutes).
TimeoutSecondsint30Azure SDK operation timeout.
KeyTypeDefaultDescription
SectionPrivacy
PackageGranit.Privacy
ExportTimeoutMinutesint5GDPR export saga timeout.
ExportMaxSizeMbint100Maximum export archive size (MB).

Keycloak Admin API — KeycloakAdminOptions

Section titled “Keycloak Admin API — KeycloakAdminOptions”
KeyTypeDefaultDescription
SectionKeycloakAdmin
PackageGranit.Identity.Keycloak
BaseUrlstring""Keycloak server base URL.
Realmstring""Realm name.
ClientIdstring""Service account client ID.
ClientSecretstring""Service account client secret (from Vault).
UseTokenExchangeForDeviceActivityboolfalseUse token exchange for device-level session info.
TimeoutSecondsint30HTTP request timeout.
DirectAccessClientIdstring?nullPublic client for credential verification.

Entra ID Admin API — EntraIdAdminOptions

Section titled “Entra ID Admin API — EntraIdAdminOptions”
KeyTypeDefaultDescription
SectionEntraIdAdmin
PackageGranit.Identity.EntraId
TenantIdstring""Azure AD tenant ID.
ClientIdstring""Service principal client ID.
ClientSecretstring""Service principal secret (from Vault).
ServicePrincipalObjectIdstring""Enterprise app Object ID for App Role ops.
DefaultDomainstring?nullDomain for userPrincipalName construction.
TimeoutSecondsint30Microsoft Graph request timeout.
GraphBaseUrlstring"https://graph.microsoft.com"Graph API base URL.
RopcClientIdstring?nullPublic client for ROPC credential verification.
KeyTypeDefaultDescription
SectionCognitoAdmin
PackageGranit.Identity.Cognito
UserPoolIdstring""Cognito User Pool ID.
Regionstring""AWS region (e.g. eu-west-1).
AccessKeyIdstring?nullAWS access key (optional — uses default credential chain if omitted).
SecretAccessKeystring?nullAWS secret key (from Vault).
TimeoutSecondsint30HTTP request timeout.
KeyTypeDefaultDescription
SectionIdentityUserCache
PackageGranit.Identity.EntityFrameworkCore
StalenessThresholdTimeSpan1.00:00:00Duration before a cached user is stale.
EnableLoginTimeSyncbooltrueAuto-sync user from JWT on each request.
IncrementalSyncBatchSizeint50Max stale entries per incremental sync batch.

Identity endpoints — IdentityEndpointsOptions

Section titled “Identity endpoints — IdentityEndpointsOptions”
KeyTypeDefaultDescription
SectionIdentityEndpoints
PackageGranit.Identity.Endpoints
RoutePrefixstring"identity/users"Route prefix.
TagNamestring"Identity User Cache"OpenAPI tag.
RequiredRolestring"granit-identity-admin"Fallback authorization role.

Identity webhook — IdentityWebhookOptions

Section titled “Identity webhook — IdentityWebhookOptions”
KeyTypeDefaultDescription
SectionIdentityWebhook
PackageGranit.Identity.Endpoints
Secretstring""HMAC-SHA256 shared secret for webhook validation.
SignatureHeaderNamestring"X-Webhook-Signature"HTTP header carrying the signature.

KeyTypeDefaultDescription
SectionCache
PackageGranit.Caching
KeyPrefixstring"dd"Prefix for all cache keys.
DefaultAbsoluteExpirationRelativeToNowTimeSpan?01:00:00Default absolute expiration.
DefaultSlidingExpirationTimeSpan?00:20:00Default sliding expiration.
EncryptValuesboolfalseEnable AES-256 encryption for all cached values.

Cache encryption — CacheEncryptionOptions

Section titled “Cache encryption — CacheEncryptionOptions”
KeyTypeDefaultDescription
SectionCache:Encryption
PackageGranit.Caching
Keystring?nullAES-256 key (base64, 32 bytes). From Vault in production.
KeyTypeDefaultDescription
SectionCache:Hybrid
PackageGranit.Caching.Hybrid
LocalCacheExpirationTimeSpan00:00:30L1 (in-memory) expiration per pod. Max recommended: 60s.
KeyTypeDefaultDescription
SectionCache:Redis
PackageGranit.Caching.StackExchangeRedis
IsEnabledbooltrueEnable Redis provider (false = Memory fallback).
Configurationstring"localhost:6379"StackExchange.Redis connection string.
InstanceNamestring"dd:"Redis key prefix for app isolation.
KeyTypeDefaultDescription
SectionMultiTenancy
PackageGranit.MultiTenancy
IsEnabledbooltrueEnable tenant resolution middleware.
TenantIdClaimTypestring"tenant_id"JWT claim for tenant ID.
TenantIdHeaderNamestring"X-Tenant-Id"HTTP header for tenant ID.

Tenant isolation — TenantIsolationOptions

Section titled “Tenant isolation — TenantIsolationOptions”
KeyTypeDefaultDescription
SectionTenantIsolation
PackageGranit.Persistence
StrategyTenantIsolationStrategySharedDatabaseSharedDatabase, TenantPerSchema, or TenantPerDatabase.
KeyTypeDefaultDescription
SectionTenantSchema
PackageGranit.Persistence
NamingConventionTenantSchemaNamingConventionTenantIdTenantId, TenantName, or Custom.
Prefixstring"tenant_"Schema name prefix.

Data migrations — MigrationStartupOptions

Section titled “Data migrations — MigrationStartupOptions”
KeyTypeDefaultDescription
SectionGranitMigrations
PackageGranit.Persistence.Migrations
DefaultBatchSizeint500Rows per batch when resuming pending cycles.
BatchExecutionTimeoutTimeSpan00:05:00Timeout per migration batch.
KeyTypeDefaultDescription
SectionSettings
PackageGranit.Settings
CacheExpirationTimeSpan00:30:00Settings cache entry lifetime.

Settings endpoints — SettingsEndpointsOptions

Section titled “Settings endpoints — SettingsEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Settings.Endpoints
UserRoutePrefixstring"settings/user"User-scoped settings route.
GlobalRoutePrefixstring"settings/global"Global settings route.
TenantRoutePrefixstring"settings/tenant"Tenant-scoped settings route.
TagNamestring"Settings"OpenAPI tag.
KeyTypeDefaultDescription
SectionReferenceData
PackageGranit.ReferenceData
CacheTimeToLiveTimeSpan01:00:00In-memory cache TTL for reference data.

Reference data endpoints — ReferenceDataEndpointsOptions

Section titled “Reference data endpoints — ReferenceDataEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.ReferenceData.Endpoints
RoutePrefixstring"reference-data"Route prefix.
TagNamestring"Reference Data"OpenAPI tag.
AdminPolicyNamestring?"ReferenceData.Admin"Admin authorization policy. null = no auth.
RequiredRolestring"granit-reference-data-admin"Fallback admin role.
KeyTypeDefaultDescription
SectionQuerying
PackageGranit.Querying
DefaultPageSizeint20Default page size for paginated queries.
MaxPageSizeint100Maximum allowed page size.

API versioning — GranitApiVersioningOptions

Section titled “API versioning — GranitApiVersioningOptions”
KeyTypeDefaultDescription
SectionApiVersioning
PackageGranit.ApiVersioning
DefaultMajorVersionint1Default API version when client omits it.
ReportApiVersionsbooltrueInclude version headers in responses.

API documentation — ApiDocumentationOptions

Section titled “API documentation — ApiDocumentationOptions”
KeyTypeDefaultDescription
SectionApiDocumentation
PackageGranit.ApiDocumentation
MajorVersionsint[][1]API versions to generate OpenAPI docs for.
Titlestring"API"API title in Scalar UI.
Descriptionstring?nullMarkdown description in OpenAPI info.
ContactEmailstring?nullContact email in OpenAPI info.
LogoUrlstring?nullLogo image URL for Scalar UI.
FaviconUrlstring?nullFavicon URL for Scalar page.
EnableInProductionboolfalseExpose docs in Production.
EnableTenantHeaderboolfalseDocument tenant header on endpoints.
TenantHeaderNamestring"X-Tenant-Id"Tenant header name.
AuthorizationPolicystring?nullPolicy for doc endpoints. "" = anonymous.
OAuth2:AuthorizationUrlstring?nullOAuth2 authorization endpoint.
OAuth2:TokenUrlstring?nullOAuth2 token endpoint.
OAuth2:ClientIdstring?nullPublic OAuth2 client ID (PKCE).
OAuth2:EnablePkcebooltrueEnable PKCE with S256.
OAuth2:Scopesstring[]["openid"]OAuth2 scopes to request.

Exception handling — ExceptionHandlingOptions

Section titled “Exception handling — ExceptionHandlingOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.ExceptionHandling
ExposeInternalErrorDetailsboolfalseShow internal error messages in ProblemDetails. Never true in production (ISO 27001).
KeyTypeDefaultDescription
SectionCors
PackageGranit.Cors
AllowedOriginsstring[][]Allowed CORS origins. Wildcard * forbidden outside Development (ISO 27001).
AllowCredentialsboolfalseInclude Access-Control-Allow-Credentials.
KeyTypeDefaultDescription
SectionCookies
PackageGranit.Cookies
ThrowOnUnregisteredbooltrueFail-fast on unregistered cookies.
DefaultRetentionDaysint365Default cookie retention period.
ThirdPartyServicesarray[]Third-party services for CMP setup (see below).

Each entry in ThirdPartyServices:

KeyTypeDescription
NamestringService identifier (e.g. "matomo").
CategoryCookieCategoryGDPR consent category.
CookiePatternsstring[]Regex patterns matching service cookies.
KeyTypeDefaultDescription
SectionKlaro
PackageGranit.Cookies.Klaro
CookieNamestring"klaro"Klaro consent cookie name.
Section titled “Cookie consent endpoints — CookieConsentEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Cookies.Endpoints
RoutePrefixstring"cookies"Route prefix.
TagNamestring"Cookies"OpenAPI tag.
KeyTypeDefaultDescription
SectionIdempotency
PackageGranit.Idempotency
HeaderNamestring"Idempotency-Key"HTTP header name.
KeyPrefixstring"idp"Redis key prefix.
CompletedTtlTimeSpan1.00:00:00TTL for completed entries.
InProgressTtlTimeSpan00:00:30TTL for in-progress lock.
ExecutionTimeoutTimeSpan00:00:25Max downstream handler execution time.
MaxBodySizeBytesint1048576Max request body size to hash (1 MiB).

Rate limiting — GranitRateLimitingOptions

Section titled “Rate limiting — GranitRateLimitingOptions”
KeyTypeDefaultDescription
SectionRateLimiting
PackageGranit.RateLimiting
EnabledbooltrueEnable rate limiting.
KeyPrefixstring"rl"Redis key prefix for counters.
FallbackOnCounterStoreFailureCounterStoreFailureBehaviorAllowBehavior when Redis is unavailable.
BypassRolesstring[][]Roles exempt from rate limiting.
UseFeatureBasedQuotasboolfalseUse Granit.Features for plan-based quotas.
PoliciesDictionary{}Named rate limit policies (see below).

Each entry in Policies:

KeyTypeDefaultDescription
AlgorithmRateLimitAlgorithmSlidingWindowSlidingWindow, FixedWindow, or TokenBucket.
PermitLimitint1000Max permits per window.
WindowTimeSpan00:01:00Time window for sliding/fixed algorithms.
SegmentsPerWindowint6Segments per sliding window (1—60).
TokenLimitint50Max tokens for TokenBucket.
TokensPerPeriodint10Tokens added per replenishment.
ReplenishmentPeriodTimeSpan00:00:10Interval between replenishments.
FeatureNamestring?nullFeature name override for quota resolution.

Bulkhead isolation — GranitBulkheadOptions

Section titled “Bulkhead isolation — GranitBulkheadOptions”
KeyTypeDefaultDescription
SectionBulkhead
PackageGranit.Bulkhead
EnabledbooltrueEnable bulkhead isolation.
BypassRolesstring[][]Roles exempt from bulkhead checks.
UseFeatureBasedQuotasboolfalseUse Granit.Features for dynamic limits.
IdleTimeoutTimeSpan00:30:00TTL for idle limiters before eviction.
CleanupIntervalTimeSpan00:05:00Interval between cleanup sweeps.
PoliciesDictionary{}Named bulkhead policies (see below).

Each entry in Policies:

KeyTypeDefaultDescription
PermitLimitint10Max concurrent operations per tenant (1—10,000).
QueueLimitint0Max queued operations. 0 = reject immediately.
QueueTimeoutTimeSpan00:00:30Max time in queue before rejection.
FeatureNamestring?nullFeature name override for dynamic resolution.

Wolverine (core) — WolverineMessagingOptions

Section titled “Wolverine (core) — WolverineMessagingOptions”
KeyTypeDefaultDescription
SectionWolverine
PackageGranit.Wolverine
RetryDelaysTimeSpan[][00:00:05, 00:00:30, 00:05:00]Cooldown delays between retry attempts.
MaxRetryAttemptsint3Maximum retry attempts.

Wolverine PostgreSQL — WolverinePostgresqlOptions

Section titled “Wolverine PostgreSQL — WolverinePostgresqlOptions”
KeyTypeDefaultDescription
SectionWolverinePostgresql
PackageGranit.Wolverine.Postgresql
TransportConnectionStringstring""PostgreSQL connection string for outbox tables.
TransactionModeTransactionMiddlewareModeEagerEager (ISO 27001-recommended) or Lightweight.

Wolverine SQL Server — WolverineSqlServerOptions

Section titled “Wolverine SQL Server — WolverineSqlServerOptions”
KeyTypeDefaultDescription
SectionWolverineSqlServer
PackageGranit.Wolverine.SqlServer
TransportConnectionStringstring""SQL Server connection string for outbox tables.
TransactionModeTransactionMiddlewareModeEagerEager (ISO 27001-recommended) or Lightweight.
KeyTypeDefaultDescription
SectionWebhooks
PackageGranit.Webhooks
HttpTimeoutSecondsint10HTTP delivery timeout (5—120).
MaxParallelDeliveriesint20Parallel deliveries on the local queue (1—100).
StorePayloadboolfalsePersist delivery payloads (GDPR: validate with DPO).

Notifications (engine) — NotificationsOptions

Section titled “Notifications (engine) — NotificationsOptions”
KeyTypeDefaultDescription
SectionNotifications
PackageGranit.Notifications
MaxParallelDeliveriesint8Max parallel delivery messages.

Notification endpoints — NotificationEndpointsOptions

Section titled “Notification endpoints — NotificationEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Notifications.Endpoints
RoutePrefixstring"notifications"Route prefix.
TagNamestring"Notifications"OpenAPI tag.
KeyTypeDefaultDescription
SectionNotifications:Email
PackageGranit.Notifications.Email
Providerstring"Smtp"Keyed service provider ("Smtp", "Brevo", "AzureCommunicationServices", "Scaleway", "SendGrid").
SenderAddressstring""Default sender email.
SenderNamestring""Default sender display name.
KeyTypeDefaultDescription
SectionNotifications:Smtp
PackageGranit.Notifications.Email.Smtp
Hoststring"localhost"SMTP server hostname.
Portint587SMTP server port.
UseSslbooltrueUse SSL/TLS.
Usernamestring?nullSMTP username.
Passwordstring?nullSMTP password (from Vault).
TimeoutSecondsint30Connection/send timeout.
KeyTypeDefaultDescription
SectionNotifications:Brevo
PackageGranit.Notifications.Brevo
ApiKeystring""Brevo API key (from Vault).
DefaultSenderEmailstring""Default sender email.
DefaultSenderNamestring""Default sender name.
DefaultSmsSenderIdstring""Default SMS sender ID.
BaseUrlstring"https://api.brevo.com/v3"Brevo API base URL.
TimeoutSecondsint30HTTP request timeout.
KeyTypeDefaultDescription
SectionNotifications:Email:Scaleway
PackageGranit.Notifications.Email.Scaleway
SecretKeystring""Scaleway API secret key (from Vault).
ProjectIdstring""Scaleway project ID.
DefaultSenderEmailstring""Default sender email (must be verified in Scaleway TEM).
DefaultSenderNamestring""Default sender display name.
Regionstring"fr-par"Scaleway region.
BaseUrlstring"https://api.scaleway.com"Scaleway API base URL.
TimeoutSecondsint30HTTP request timeout.
KeyTypeDefaultDescription
SectionNotifications:Email:SendGrid
PackageGranit.Notifications.Email.SendGrid
ApiKeystring""SendGrid API key (from Vault).
DefaultSenderEmailstring""Default sender email (must be verified in SendGrid).
DefaultSenderNamestring""Default sender display name.
SandboxModeboolfalseEnable SendGrid sandbox mode (no actual delivery).
TimeoutSecondsint30HTTP request timeout.
KeyTypeDefaultDescription
SectionNotifications:Twilio
PackageGranit.Notifications.Twilio
AccountSidstring""Twilio Account SID.
AuthTokenstring""Twilio Auth Token (from Vault).
DefaultSmsFromstring""Default SMS sender number (E.164 format) or Messaging Service SID.
DefaultWhatsAppFromstring""Default WhatsApp sender (e.g. whatsapp:+14155238886).
MessagingServiceSidstring?nullTwilio Messaging Service SID (overrides DefaultSmsFrom when set).
TimeoutSecondsint30HTTP request timeout.
KeyTypeDefaultDescription
SectionNotifications:Sms
PackageGranit.Notifications.Sms
Providerstring""Keyed service provider ("Brevo", "AzureCommunicationServices", "AwsSns", "Twilio").
SenderIdstring?nullDefault sender ID.

WhatsApp channel — WhatsAppChannelOptions

Section titled “WhatsApp channel — WhatsAppChannelOptions”
KeyTypeDefaultDescription
SectionNotifications:WhatsApp
PackageGranit.Notifications.WhatsApp
Providerstring""Keyed service provider ("Brevo", "Twilio").
KeyTypeDefaultDescription
SectionNotifications:Push
PackageGranit.Notifications.WebPush
VapidSubjectstring""VAPID subject (mailto: or https: URL).
VapidPublicKeystring""VAPID public key (base64 URL-safe).
VapidPrivateKeystring""VAPID private key (from Vault).
KeyTypeDefaultDescription
SectionNotifications:MobilePush
PackageGranit.Notifications.MobilePush
Providerstring"GoogleFcm"Keyed service provider.

Firebase Cloud Messaging — GoogleFcmOptions

Section titled “Firebase Cloud Messaging — GoogleFcmOptions”
KeyTypeDefaultDescription
SectionNotifications:MobilePush:GoogleFcm
PackageGranit.Notifications.MobilePush.GoogleFcm
ProjectIdstring""Firebase project ID.
ServiceAccountJsonstring""Service account JSON key (from Vault).
BaseAddressstring"https://fcm.googleapis.com/"FCM API base address.
TimeoutSecondsint30Request timeout.
KeyTypeDefaultDescription
SectionAzureCommunicationServices:Email
PackageGranit.Notifications.Email.AzureCommunicationServices
ConnectionStringstring?nullACS connection string. Mutually exclusive with Endpoint.
Endpointstring?nullACS endpoint URI (uses DefaultAzureCredential).
SenderAddressstring""Sender email address (must be verified in ACS).
TimeoutSecondsint120Send operation timeout (ACS emails can take time).
KeyTypeDefaultDescription
SectionAzureCommunicationServices:Sms
PackageGranit.Notifications.Sms.AzureCommunicationServices
ConnectionStringstring?nullACS connection string. Mutually exclusive with Endpoint.
Endpointstring?nullACS endpoint URI (uses DefaultAzureCredential).
FromPhoneNumberstring""Sender phone number in E.164 format (must start with +).
TimeoutSecondsint30Send operation timeout.

Azure Notification Hubs — AzureNotificationHubsOptions

Section titled “Azure Notification Hubs — AzureNotificationHubsOptions”
KeyTypeDefaultDescription
SectionNotifications:AzureNotificationHubs
PackageGranit.Notifications.MobilePush.AzureNotificationHubs
ConnectionStringstring""Notification Hub connection string.
HubNamestring""Notification Hub name.
TimeoutSecondsint30Send operation timeout.
KeyTypeDefaultDescription
SectionNotifications:SignalR
PackageGranit.Notifications.SignalR
RedisConnectionStringstring?nullRedis connection for SignalR backplane (multi-pod).
KeyTypeDefaultDescription
SectionNotifications:Sse
PackageGranit.Notifications.Sse
HeartbeatIntervalSecondsint30Keep-alive heartbeat interval.
KeyTypeDefaultDescription
SectionNotifications:Zulip
PackageGranit.Notifications.Zulip
DefaultStreamstring"alerts"Default Zulip stream.
DefaultTopicstring"system"Default Zulip topic.
KeyTypeDefaultDescription
SectionNotifications:Zulip:Bot
PackageGranit.Notifications.Zulip
BaseUrlstring""Zulip server base URL.
BotEmailstring""Bot email address.
ApiKeystring""Bot API key (from Vault).
TimeoutSecondsint30Request timeout.

Templating endpoints — TemplatingEndpointsOptions

Section titled “Templating endpoints — TemplatingEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Templating.Endpoints
RoutePrefixstring"templates"Route prefix.
TagNamestring"Templates"OpenAPI tag.
KeyTypeDefaultDescription
SectionDocumentGeneration:Pdf
PackageGranit.DocumentGeneration.Pdf
PaperFormatstring"A4"Paper format (A4, A5, Letter).
LandscapeboolfalseLandscape orientation.
MarginTopstring"10mm"Top margin (CSS units).
MarginBottomstring"10mm"Bottom margin.
MarginLeftstring"10mm"Left margin.
MarginRightstring"10mm"Right margin.
HeaderTemplatestring?nullHTML header template (PuppeteerSharp classes).
FooterTemplatestring?nullHTML footer template.
PrintBackgroundbooltruePrint background graphics.
ChromiumExecutablePathstring?nullCustom Chromium path. null = PuppeteerSharp-managed.
MaxConcurrentPagesint4Max parallel Chromium tabs (1—32).

KeyTypeDefaultDescription
SectionDataExchange
PackageGranit.DataExchange
DefaultMaxFileSizeMbint50Max file size (MB) unless overridden per definition.
DefaultBatchSizeint500Default import batch size.
FuzzyMatchThresholddouble0.8Minimum fuzzy matching score for mapping suggestions.
KeyTypeDefaultDescription
SectionDataExport
PackageGranit.DataExchange
BackgroundThresholdint1000Row count above which export runs as a background job.

Data exchange endpoints — DataExchangeEndpointsOptions

Section titled “Data exchange endpoints — DataExchangeEndpointsOptions”
KeyTypeDefaultDescription
SectionDataExchangeEndpoints
PackageGranit.DataExchange.Endpoints
RoutePrefixstring"data-exchange"Route prefix.
RequiredRolestring"granit-data-exchange-admin"Fallback authorization role.
TagNamestring"Data Exchange"OpenAPI tag.

Workflow endpoints — WorkflowEndpointsOptions

Section titled “Workflow endpoints — WorkflowEndpointsOptions”
KeyTypeDefaultDescription
SectionWorkflowEndpoints
PackageGranit.Workflow.Endpoints
RoutePrefixstring"workflow"Route prefix.
RequiredRolestring"granit-workflow-admin"Fallback authorization role.
TagNamestring"Workflow"OpenAPI tag.

KeyTypeDefaultDescription
SectionObservability
PackageGranit.Observability
ServiceNamestring"unknown-service"OTEL service name.
ServiceVersionstring"0.0.0"Service version.
OtlpEndpointstring"http://localhost:4317"OTLP gRPC endpoint.
ServiceNamespacestring"my-company"OTEL service namespace.
Environmentstring"development"Deployment environment.
EnableTracingbooltrueEnable trace export.
EnableMetricsbooltrueEnable metrics export.
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Diagnostics
LivenessPathstring"/health/live"Liveness probe path.
ReadinessPathstring"/health/ready"Readiness probe path.
StartupPathstring"/health/startup"Startup probe path.
DefaultCacheDurationTimeSpan00:00:10Health check cache duration.

Timeline endpoints — TimelineEndpointsOptions

Section titled “Timeline endpoints — TimelineEndpointsOptions”
KeyTypeDefaultDescription
SectionTimelineEndpoints
PackageGranit.Timeline.Endpoints
RoutePrefixstring"timeline"Route prefix.
RequiredRolestring"granit-timeline-user"Fallback authorization role.
TagNamestring"Timeline"OpenAPI tag.

Blob storage (core) — BlobStorageOptions

Section titled “Blob storage (core) — BlobStorageOptions”
KeyTypeDefaultDescription
SectionBlobStorage
PackageGranit.BlobStorage
UploadUrlExpiryTimeSpan00:15:00Pre-signed upload URL TTL.
DownloadUrlExpiryTimeSpan00:05:00Pre-signed download URL TTL.

Extends BlobStorageOptions with S3-specific settings. Bound from the same BlobStorage section.

KeyTypeDefaultDescription
SectionBlobStorage
PackageGranit.BlobStorage.S3
ServiceUrlstring""S3-compatible endpoint URL.
AccessKeystring""S3 access key (from Vault).
SecretKeystring""S3 secret key (from Vault).
Regionstring"us-east-1"S3 region identifier.
DefaultBucketstring""Default bucket name.
ForcePathStylebooltrueUse path-style URLs (required for MinIO).
TenantIsolationBlobTenantIsolationPrefixPrefix or BucketPerTenant.

Extends BlobStorageOptions with Azure Blob-specific settings. Bound from the same BlobStorage section.

KeyTypeDefaultDescription
SectionBlobStorage
PackageGranit.BlobStorage.AzureBlob
ConnectionStringstring""Azure Storage connection string (from Vault).
DefaultContainerstring""Default blob container name.
UseManagedIdentityboolfalseUse Azure Managed Identity instead of connection string.
ServiceUristring""Storage account URI (required when UseManagedIdentity = true).
TenantIsolationBlobTenantIsolationPrefixPrefix or Container (one per tenant).

Blob storage FileSystem — FileSystemBlobOptions

Section titled “Blob storage FileSystem — FileSystemBlobOptions”

Extends BlobStorageOptions with local file system settings. Bound from the same BlobStorage section.

KeyTypeDefaultDescription
SectionBlobStorage
PackageGranit.BlobStorage.FileSystem
BasePathstring""Root directory for blob storage (required).

Blob storage Database — DatabaseBlobOptions

Section titled “Blob storage Database — DatabaseBlobOptions”

Extends BlobStorageOptions with database storage settings. Bound from the same BlobStorage section.

KeyTypeDefaultDescription
SectionBlobStorage
PackageGranit.BlobStorage.Database
MaxBlobSizeByteslong10485760 (10 MB)Maximum blob size accepted by the provider.

Configuration for the proxy endpoint provider used by FileSystem and Database providers. Bound from the BlobStorage:Proxy section.

KeyTypeDefaultDescription
SectionBlobStorage:Proxy
PackageGranit.BlobStorage.Proxy
BaseUrlstring""Public URL of the API server (required).
RoutePrefixstring"/api/blobs"Route prefix for proxy endpoints.
MaxUploadByteslong104857600 (100 MB)Maximum upload size through proxy.

KeyTypeDefaultDescription
SectionBackgroundJobs
PackageGranit.BackgroundJobs
ModeJobStoreModeInMemoryInMemory (dev) or Durable (EF Core).
ConnectionStringstring""DB connection string (required when Mode is Durable).

Background jobs endpoints — BackgroundJobsEndpointsOptions

Section titled “Background jobs endpoints — BackgroundJobsEndpointsOptions”
KeyTypeDefaultDescription
SectionBackgroundJobsEndpoints
PackageGranit.BackgroundJobs.Endpoints
RoutePrefixstring"background-jobs"Route prefix.
RequiredRolestring"granit-background-jobs-admin"Fallback authorization role.
TagNamestring"Background Jobs"OpenAPI tag.

Localization — GranitLocalizationOptions

Section titled “Localization — GranitLocalizationOptions”
KeyTypeDefaultDescription
Section(configured in code via lambda)
PackageGranit.Localization
EnableAutoDiscoveryboolfalseAuto-discover JSON localization resources by naming convention.

GranitLocalizationOptions is primarily configured through code (services.AddGranitLocalization(options => ...)) rather than appsettings.json. Properties like Languages, Resources, and FormattingCultures are populated programmatically.

Localization overrides cache — LocalizationOverridesCacheOptions

Section titled “Localization overrides cache — LocalizationOverridesCacheOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Localization
CacheTtlTimeSpan00:05:00In-memory TTL for DB override dictionaries.

Localization endpoints — LocalizationEndpointsOptions

Section titled “Localization endpoints — LocalizationEndpointsOptions”
KeyTypeDefaultDescription
Section(configured in code)
PackageGranit.Localization.Endpoints
RoutePrefixstring"localization"Route prefix.
TagNamestring"Localization"OpenAPI tag.