Connection strings
Format, TLS, role and password rules for Kisenon endpoints.
Every Kisenon endpoint exposes a standard postgresql:// URI:
postgresql://<role>:<pwd>@<endpoint_id>.<region>.kisenon.com:5432/<database>?sslmode=requireComponents
| Field | Meaning |
|---|---|
<role> | A Postgres role created on the branch. The endpoint card shows the auto-created app role; you can create more via SQL. |
<pwd> | The role's password. Surfaced once at creation; rotate via SQL. |
<endpoint_id> | Stable per endpoint, e.g. ep_4f3c12a9b8e6. SNI-routed. |
<region> | Your project's region slug — usc1 today (US Central, GCP). Derived, not hardcoded; see Regions. |
kisenon.com | The data-plane apex. Routes via TLS SNI to your endpoint. |
5432 | Standard Postgres port. |
<database> | Default main; create more with CREATE DATABASE. |
?sslmode=require | TLS is mandatory. verify-full also works and is recommended. |
TLS
Endpoints terminate TLS with a Let's Encrypt certificate for
*.<region>.kisenon.com. Standard Postgres clients verify against the system
trust store; no custom CA needed.
sslmode=verify-full is recommended for production code. It checks the
certificate chain and the hostname.
How the proxy routes to your endpoint
The data-plane proxy decides which endpoint a connection belongs to from two signals, in order:
- The
neon.endpoint_idstartup option, if the client sends one. - The TLS SNI hostname (
<endpoint_id>.<region>.kisenon.com) as a fallback.
The username field is not consulted for routing — pick any role your branch defines. Console-generated connection strings carry the endpoint in the hostname, so they route via SNI automatically and you don't need to set anything extra.
Pass neon.endpoint_id explicitly only when your client can't present
the endpoint in SNI — for example a TLS stack that won't send a Server
Name extension, or a tunnel that rewrites the host. Most Postgres
drivers send SNI by default, so this is rarely needed.
Connection pooling
Pooling is GA and on by default — every endpoint has a pooled host alongside its direct one (since 2026-07-18).
The pooled host is <endpoint_id>-pooler.<region>.kisenon.com — the same
endpoint, with -pooler inserted into the host label — on port 5432
with sslmode=require:
postgresql://<role>:<pwd>@<endpoint_id>-pooler.<region>.kisenon.com:5432/<database>?sslmode=requireThe console Connect panel and the API response both hand you a
connection_uri_pooled alongside the direct connection_uri.
The pooler runs in transaction pooling mode (a PgBouncer sidecar per compute). That's ideal for many short-lived connections — serverless functions, edge runtimes, agents — where each transaction can borrow a server connection and return it immediately.
Use the direct (unpooled :5432) connection instead when you need:
LISTEN/NOTIFY.- Session-level advisory locks.
- Session
SET/ GUCs that must outlive a single transaction. - Server-side prepared statements.
The direct connection_uri is always available and is never removed, so
these keep working exactly as before. A client-side pool (PgBouncer or
your driver's built-in pool) in front of the direct connection also
remains valid.
Opt an endpoint out of pooling with the pooler_enabled: false field at
create time or via PATCH /v1/endpoints/{endpointId}. The default is
true.
Multiple endpoints
You can spawn multiple endpoints on the same branch. They share storage but have independent connection limits and caches. Use them to isolate:
- App vs analytics traffic.
- Read replicas (any endpoint on a branch is essentially a read replica if you don't write to it).
- Per-environment endpoints on dev branches.