Lightning Swap Connect (LSC) URI

Lightning Swap Connect (LSC) is OpenReceive’s short, server-only format for configuring an authenticated swap API endpoint. One URI replaces a provider’s HTTPS base URL, API key, and API secret.

Example

lightning+swapconnect://swap.example/v1?key=example-key&secret=example-secret

The example resolves to:

Value Result
HTTPS API base URL https://swap.example/v1/
API key example-key
API secret example-secret

LSC does not replace NWC. NWC connects OpenReceive to the receive-only Lightning wallet. LSC connects OpenReceive to an optional service that accepts another asset and swaps it into a Lightning invoice.

URI syntax

An LSC v0.1 URI has this form:

lightning+swapconnect://host[/path]?key=KEY&secret=SECRET

The components are:

Component Required Meaning
Scheme Yes Exactly lightning+swapconnect
Host Yes Swap provider HTTPS host
Port No Explicit HTTPS port
Path No Swap provider API base path. Defaults to /
key Yes Provider API key
secret Yes Provider API secret

The URI must not contain user information or a fragment. Each required query parameter must appear exactly once. Unknown parameters are rejected, so a typo cannot silently change your configuration.

LSC v0.1 defines one swap-provider API contract. OpenReceive assumes every configured provider implements it. That is why the URI has no field for choosing or negotiating a contract.

Query names and values use standard URI percent-encoding. Build URIs with a URL library instead of joining strings. The OpenReceive Node package exports formatLscUri() for this.

Endpoint mapping

The custom scheme always maps to HTTPS:

lightning+swapconnect://HOST[:PORT]/PATH
                         │
                         └── https://HOST[:PORT]/PATH/

You cannot express plain HTTP. The parsed base path always ends with a slash. OpenReceive builds a provider identifier from the lower-case hostname, the optional port, and the path, replacing unsupported characters with -. Two configured URIs may not produce the same identifier.

Environment variables

You configure swap providers with LSC_URI_PRIMARY and, optionally, LSC_URI_BACKUP. While the primary answers, OpenReceive uses only the primary. It uses the backup only when the primary is down. See Environment variables.

The BTCPay Server plugin reads no environment variables. You paste the primary and backup codes into Store → OpenReceive, and the plugin keeps them in its per-store settings (BTCPay quickstart). The same primary-then-backup rule applies.

Security requirements

An LSC URI is a bearer credential. Anyone who has it can use whatever permissions and budget the provider gave that key.

NWC deliberately defines a connection URI for a client and a wallet service that use cryptographic keys. LSC just packages ordinary HTTPS API credentials. It adds no end-to-end encryption beyond TLS, and it defines no provider authorization handshake.