Operating
Server and Security Configuration
Configure server runtime, secure mode, request size limits, tokenization, and rate limiting in Blnk.
This page covers the configuration used to control how the Blnk server listens for requests, protects access to the API, and enables tokenization for sensitive identity fields.
Server settings
Use the server settings below to configure how Blnk exposes its API and enforces authentication.
BLNK_SERVER_SECURE=false
BLNK_SERVER_SECRET_KEY=
BLNK_SERVER_PORT=5001
BLNK_METRICS_BEARER_TOKEN={
"server": {
"secure": false,
"secret_key": "",
"port": "5001",
"metrics_bearer_token": ""
}
}BLNK_SERVER_SECURE
Enables additional secure-mode protections for the server.
BLNK_SERVER_SECRET_KEY
Secret used for signing and other cryptographic operations.
BLNK_SERVER_PORT
The port Blnk listens on for incoming HTTP or HTTPS requests.
BLNK_METRICS_BEARER_TOKEN
Bearer token required to access /metrics when set. See Metrics endpoint.
BLNK_SERVER_SECURE
This controls whether API authentication is enforced when you make requests to the server. When set to false, Blnk skips authentication checks.
When set to true, requests must authenticate via X-Blnk-Key header using one of the following:
- the master key,
BLNK_SERVER_SECRET_KEY - a stored API key
BLNK_SERVER_SECRET_KEY
This is required for any secure Blnk deployment. It is used in two places in Blnk:
- As the master API key for authenticated requests to the server
- As the HMAC signing secret for outgoing webhooks and hook callbacks.
This means the same secret affects both request authentication and webhook signature validation on systems receiving Blnk webhooks.
Best practices
- Set
BLNK_SERVER_SECURE=truein any real deployment. - Use a strong secret for
BLNK_SERVER_SECRET_KEY, and make sure to store secrets outside version control. - Keep the server secret stable within an environment unless you are prepared to update any systems that verify webhook signatures.
Metrics endpoint
When monitoring export is enabled, Blnk serves Prometheus metrics at GET /metrics on the API port and on the worker monitoring port. Set metrics_bearer_token to require Authorization: Bearer <token> on scrape requests.
server.secure | Token set | /metrics access |
|---|---|---|
false | no | Open |
false | yes | Bearer required |
true | yes | Bearer required |
true | no | Blocked |
The same rules apply on the worker monitoring port. Auth failures return structured JSON - see API error codes.
HTTPS settings
Use these settings to serve the API over HTTPS. TLS is off by default.
BLNK_SERVER_SSL=false
BLNK_SERVER_SSL_DOMAIN=
BLNK_SERVER_SSL_EMAIL=
BLNK_CERT_STORAGE_PATH=/var/lib/blnk/certs{
"server": {
"ssl": false,
"domain": "",
"ssl_email": "",
"cert_storage_path": "/var/lib/blnk/certs",
"port": "5001"
}
}BLNK_SERVER_SSL
When true, Blnk starts an HTTPS listener on server.port and obtains a certificate for server.domain. When false, Blnk serves plaintext HTTP.
BLNK_SERVER_SSL_DOMAIN
Domain used to issue the certificate. Point this hostname at the server before you enable SSL. When empty, Blnk defaults to localhost.
BLNK_SERVER_SSL_EMAIL
Email Let’s Encrypt uses for certificate expiry notices.
BLNK_CERT_STORAGE_PATH
Directory where issued certificates are stored. The process must be able to write here.
How server.ssl works
When ssl is false, Blnk serves plaintext HTTP on server.port.
When ssl is true, Blnk:
- Starts an HTTPS listener on the same
server.port(not a separate TLS port). - Obtains a certificate for
server.domainwith Let’s Encrypt (certmagic). - Writes certificates to
cert_storage_path. - Logs the scheme (
https) on startup so you can confirm TLS is on. - Uses the same graceful shutdown path as the HTTP listener.
If a certificate cannot be issued, the server fails to start. It does not fall back to plaintext HTTP. A certificate failure names the domains in the error instead of exiting from a background goroutine.
Tokenization settings
Use tokenization settings to enable encryption and token generation when using the PII Tokenization feature.
BLNK_TOKENIZATION_SECRET="blnk-pii-secret"{
"tokenization_secret": "blnk-pii-secret"
}BLNK_TOKENIZATION_SECRET
Enables tokenization for sensitive identity fields. Must be exactly 32 bytes long. Used as the cryptographic secret for tokenization operations. Disabled when unset.
Tokenization behaviour
Tokenization is only enabled when BLNK_TOKENIZATION_SECRET is set and is exactly 32 bytes long. If the secret is missing, tokenization is disabled. If the secret is set but not 32 bytes long, Blnk does not fail startup, but tokenization operations may fail when called.
When enabled, Blnk uses this secret for AES-GCM encryption in standard tokenization and HMAC-based seeding for format-preserving tokenization.
Request and payload limits
Use these settings to limit request body size and upload size.
BLNK_SERVER_MAX_REQUEST_BODY_SIZE_MB=5
BLNK_SERVER_MAX_UPLOAD_SIZE_MB=256{
"server": {
"max_request_body_size_mb": 5,
"max_upload_size_mb": 256
}
}BLNK_SERVER_MAX_REQUEST_BODY_SIZE_MB
Max size in MB for JSON request bodies.
BLNK_SERVER_MAX_UPLOAD_SIZE_MB
Max size in MB for multipart uploads. Applies to reconciliation upload.
How limits are applied
| Request type | Config key | When exceeded |
|---|---|---|
| JSON API requests | BLNK_SERVER_MAX_REQUEST_BODY_SIZE_MB | 400 with GEN_MALFORMED_REQUEST and message http: request body too large. |
| Multipart uploads | BLNK_SERVER_MAX_UPLOAD_SIZE_MB | 413 with GEN_PAYLOAD_TOO_LARGE on reconciliation file upload. |
Rate limiting
Use rate limiting settings to protect the API from abuse and to control traffic spikes more predictably.
BLNK_RATE_LIMIT_RPS=5000000
BLNK_RATE_LIMIT_BURST=10000000
BLNK_RATE_LIMIT_CLEANUP_INTERVAL_SEC=10800{
"rate_limit": {
"requests_per_second": 5000000,
"burst": 10000000,
"cleanup_interval_sec": 10800
}
}BLNK_RATE_LIMIT_RPS
Maximum requests allowed per second per client.
BLNK_RATE_LIMIT_BURST
Maximum short burst allowed above the RPS limit.
BLNK_RATE_LIMIT_CLEANUP_INTERVAL_SEC
Cleanup interval for expired rate-limit data, in seconds.
Rate limiting behaviour
If both BLNK_RATE_LIMIT_RPS and BLNK_RATE_LIMIT_BURST are unset, Blnk applies its built-in defaults.
If you set only one of those two values, Blnk derives the other automatically:
- if only
BLNK_RATE_LIMIT_RPSis set,burstdefaults to2 * RPS - if only
BLNK_RATE_LIMIT_BURSTis set,requests_per_seconddefaults toburst / 2