caparra-gate reads one TOML file, given with --config (or the
CAPARRA_CONFIG environment variable). Unknown keys are an error. Relative
paths are resolved from the directory the gate runs in. Secrets never sit
in the file itself: keys name files that hold them, or, for NWC, an
environment variable.
caparra-gate check --config gate.toml runs every start-up check and
exits 0 when the gate would start. Two complete examples are in the
repository: examples/quickstart/gate.toml (fake rail, local) and
examples/llm-proxy/gate.toml (phoenixd, process signer, a metered
OpenAI-compatible route).
The manifest made offline by caparra-gate manifest sign, served byte for byte at /.well-known/bnap
root
none
The root public key (64 hex) the manifest must be signed by; recommended
required
false
The required flag manifest sign writes: clients then pay this origin only through BNAP offers
max_age_s
604800
The manifest’s max_age, at most 30 days
The gate refuses to start when the manifest’s signature, root, origin,
routes, limits or keys do not match the configuration, when it has expired,
or when the signer cannot sign with its offer and receipt keys.
bnap:notes, httpauth:L402 or payment:lightning/charge
rail / rails
The rail or rails it settles over
enabled
true
secret_file
L402 and MPP: file holding the scheme’s secret, 64 hex
realm
origin’s host
MPP: the challenge realm
network
mainnet
MPP: mainnet, signet or regtest
max_fund_sat
bnap:notes: funding inside the 402 up to this many sat
issuer_url
<origin>/cashu
bnap:notes: the issuer’s Cashu API base. On the gate’s origin, the gate answers GET and HEAD of {issuer}/v1/keysets, {issuer}/v1/keys and {issuer}/v1/keys/{id} itself; it refuses to start when this is the origin’s root or a route lies under those paths