Skip to main content
By the end of this page you have a Rail402 facilitator serving stellar:testnet, verifying and settling payments, with the Bazaar co-deployed in the same process. This uses @rail402.dev/facilitator.
The facilitator is non-custodial. It never holds buyer funds. The only value it moves is the buyer-signed Soroban authorization, submitted exactly as authorized. It also sponsors the network fee, so a buyer needs only the payment asset and no XLM. On stellar:testnet it is free and needs no API key.

Pick how you run it

Use the hosted facilitator

Point clients at https://facilitator.rail402.dev. Nothing to install or operate.

Run it yourself

npx @rail402.dev/facilitator on testnet with zero config, a real signer, or Docker.

Option 1: use the hosted facilitator

Rail402 runs a public testnet facilitator. If you only need something to point clients at, use it and skip the rest of this page:
It exposes /verify, /settle, /supported, /health, and the Bazaar at /discovery/resources and /discovery/search. It is free, needs no API key, and sponsors fees.

Option 2: run it on testnet with zero config

Run the facilitator with no signer of your own. On testnet it generates an ephemeral signing account and funds it from friendbot, so you get a working service in one command:
It listens on the default port 4022. The ephemeral signer is fine for local testing. It is regenerated on every restart, so use a real signer for anything you keep.
The zero-config signer is ephemeral. Its catalog and its account are thrown away when the process exits. Do not run a service anyone depends on this way.

Option 3: run it with your own signer

1

Fund a testnet account

The signer pays each settlement fee it sponsors, so it needs a funded stellar:testnet account. Generate and fund one with the Rail402 CLI:
It prints the secret (S...). Keep it out of source control. (Option 2: create and fund one at Stellar Lab.)
2

Start the facilitator

Pass the secret, a port, and a catalog file so listings survive a restart:
Flags: --secret, --network, --port, --catalog-db, plus --help and --version. The default network is stellar:testnet and the default port is 4022.

Option 4: run it with Docker

The repository Dockerfile builds the facilitator and Bazaar as one image. Mount a volume so the catalog persists:
The image points CATALOG_DB_PATH at /data, so the -v rail402-catalog:/data volume keeps the catalog across restarts.

Verify it is serving

Whichever option you chose, confirm the surface before you point clients at it:
/supported lists the exact and upto schemes on stellar:testnet with areFeesSponsored: true and bazaar in extensions. /health returns HTTP 200 with the networks served, the signer count, and the catalog storage mode:
catalog.storage reads memory for a zero-config run and durable once you give the catalog a file or volume (CATALOG_DB_PATH). Configuration is validated before the port binds, so a misconfigured deployment fails immediately with a coded reason instead of serving broken payments.

Next steps

Configuration

Every environment variable, the fee ceiling, and the fee model.

Bazaar operations

The co-deployed catalog, durability, and the cataloging lifecycle.

Monitoring and runbook

/health, /metrics, and the degraded-mode story.

Self-facilitation

Run verify and settle in-process, with no separate service.