Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.lerian.studio/llms.txt

Use this file to discover all available pages before exploring further.

Systemplane lets you view and modify Matcher’s configuration at runtime — without restarting the service. In regulated financial environments, unplanned service downtime to apply configuration changes is a compliance risk and an operational disruption. Systemplane eliminates that: operational parameters can be adjusted while the service continues running, keeping reconciliation processes uninterrupted.

Why use Systemplane


In a traditional deployment, changing a configuration value means updating environment variables and restarting the service. Systemplane eliminates that downtime for many settings:
  • Adjust rate limits during traffic spikes without a redeploy — avoiding service disruption during peak transaction volumes
  • Tune worker intervals based on observed workload — optimizing reconciliation throughput without touching infrastructure
  • Update connection pool sizes as traffic patterns change
  • Inspect current runtime values to diagnose production issues without log diving

How it works


Systemplane provides a flat key-value management API. All configuration keys are in a single namespace under /system/matcher.

Endpoints

EndpointMethodWhat it does
/system/matcherGETList all keys and their current values
/system/matcher/:keyGETGet a specific key’s current value
/system/matcher/:keyPUTUpdate a specific key’s value
These endpoints are served directly by the running Matcher instance. They are not versioned under /v1 — use the paths above exactly as shown.

Permissions


Systemplane endpoints are protected by the same authentication used by all Matcher API routes. When authentication is enabled, all /system endpoints require the system:admin RBAC permission. When authentication is disabled, all endpoints are accessible without restriction.

Apply behaviors


Not every configuration value can be changed at runtime. Each key has an apply behavior that tells you when changes take effect:
BehaviorWhat happens
Bootstrap onlyThe value is read once at startup. You must restart the service for changes to take effect.
Live readChanges take effect immediately on the next request.
Bundle rebuildChanges trigger an internal state refresh. Takes effect within seconds.
Worker reconcileBackground workers pick up the new value on their next cycle.
Keys that are bootstrap-only are NOT registered in the systemplane API — they are managed exclusively through environment variables. This prevents a footgun where an admin PUT would appear to succeed but the running process would silently continue using the boot-time value.

Common configuration keys


Below are the most commonly adjusted keys, organized by category. For a complete list, call GET /system/matcher.

Runtime-adjustable keys

These keys can be changed without restarting Matcher:
KeyEnv variableDescription
app.env_nameENV_NAMEApplication environment name
server.body_limit_bytesHTTP_BODY_LIMIT_BYTESMaximum HTTP request body size
cors.allowed_originsCORS_ALLOWED_ORIGINSAllowed CORS origins
cors.allowed_methodsCORS_ALLOWED_METHODSAllowed CORS methods
cors.allowed_headersCORS_ALLOWED_HEADERSAllowed CORS headers
swagger.enabledSWAGGER_ENABLEDEnable or disable Swagger UI
swagger.hostSWAGGER_HOSTSwagger host override
swagger.schemesSWAGGER_SCHEMESSwagger URL schemes
rate_limit.enabledRATE_LIMIT_ENABLEDEnable or disable global rate limiting
rate_limit.maxRATE_LIMIT_MAXMaximum requests per rate limit window
rate_limit.expiry_secRATE_LIMIT_EXPIRY_SECRate limit window duration (seconds)
rate_limit.export_maxEXPORT_RATE_LIMIT_MAXExport endpoint rate limit
rate_limit.dispatch_maxDISPATCH_RATE_LIMIT_MAXDispatch endpoint rate limit
rate_limit.admin_maxADMIN_RATE_LIMIT_MAXAdmin plane (/system) rate limit
idempotency.retry_window_secIDEMPOTENCY_RETRY_WINDOW_SECWindow for retrying failed idempotent requests
idempotency.success_ttl_hoursIDEMPOTENCY_SUCCESS_TTL_HOURSHow long completed idempotency keys are cached
fetcher.enabledFETCHER_ENABLEDEnable or disable the Fetcher module
fetcher.urlFETCHER_URLFetcher service URL
fetcher.discovery_interval_secFETCHER_DISCOVERY_INTERVAL_SECHow often Matcher polls Fetcher for new data sources
export_worker.enabledEXPORT_WORKER_ENABLEDEnable or disable the export worker
export_worker.poll_interval_secEXPORT_WORKER_POLL_INTERVAL_SECHow often the export worker checks for new jobs
cleanup_worker.enabledCLEANUP_WORKER_ENABLEDEnable or disable the cleanup worker
cleanup_worker.interval_secCLEANUP_WORKER_INTERVAL_SECCleanup worker interval
scheduler.interval_secSCHEDULER_INTERVAL_SECScheduler polling interval
archival.enabledARCHIVAL_WORKER_ENABLEDEnable or disable the archival worker
webhook.timeout_secWEBHOOK_TIMEOUT_SECTimeout for webhook/callback dispatch
callback_rate_limit.per_minuteCALLBACK_RATE_LIMIT_PER_MINMaximum callbacks per external system per minute
telemetry.enabledENABLE_TELEMETRYEnable OpenTelemetry
deduplication.ttl_secDEDUPE_TTL_SECDeduplication TTL in seconds

Multi-tenant keys (runtime adjustable)

These keys control multi-tenant behavior and can be adjusted without restart. See Multi-Tenant Mode for details.
KeyEnv variableDescription
tenancy.multi_tenant_enabledMULTI_TENANT_ENABLEDEnable multi-tenant infrastructure
tenancy.multi_tenant_urlMULTI_TENANT_URLTenant Manager service URL
tenancy.multi_tenant_max_tenant_poolsMULTI_TENANT_MAX_TENANT_POOLSMaximum concurrent tenant pools
tenancy.multi_tenant_idle_timeout_secMULTI_TENANT_IDLE_TIMEOUT_SECIdle timeout for tenant pool eviction
tenancy.multi_tenant_cache_ttl_secMULTI_TENANT_CACHE_TTL_SECTenant config cache TTL

Bootstrap-only keys (require restart)

These keys are not registered in the systemplane API. Change them via environment variables and restart:
KeyEnv variableDescription
app.log_levelLOG_LEVELApplication log level (debug, info, warn, error)
server.addressSERVER_ADDRESSHTTP server listen address
postgres.primary_hostPOSTGRES_HOSTPrimary database host
postgres.primary_portPOSTGRES_PORTPrimary database port
postgres.primary_dbPOSTGRES_DBPrimary database name
redis.hostREDIS_HOSTRedis host
rabbitmq.hostRABBITMQ_HOSTRabbitMQ host
auth.enabledPLUGIN_AUTH_ENABLEDEnable authentication middleware
auth.hostPLUGIN_AUTH_ADDRESSAuth service address

Best practices


Call GET /system/matcher to see all current runtime values before making any changes. This confirms what the process is actually using, which may differ from environment variables if previous PUT calls were made.
Even though runtime changes don’t require a restart, they take effect immediately. Test in a staging environment before applying to production.
If a key is not visible in GET /system/matcher, it is bootstrap-only. Update the environment variable and restart the service — there is no runtime path for those values.

Next steps


Multi-tenant mode

Enable and configure tenant isolation.

Exception routing

Configure how exceptions are dispatched to external systems.

Match rules

Configure transaction matching rules.

Security

Authentication, authorization, and data protection.