FAQ
The questions the guides answer badly inline. Every answer cites the FACTS row, DECISIONS entry, or document that makes it true.
Why is my listing missing after a successful payment?
Cataloging is settle-gated and client-mediated: the listing is written only
when a payment settles and the client echoed your bazaar extension from the
402 into the payment payload — if the client omits the echo, no cataloging
occurs and the seller cannot force it (D-004, F-032). Check the
EXTENSION-RESPONSES header on your settle response: a rejected status
carries a human rejectedReason plus a machine code naming the defect
(D-014). Also note that invalid optional fields (serviceName, tags,
iconUrl, routeTemplate) are soft-dropped individually — the listing appears
but without the offending field (F-030, F-031).
Why did my payment expire?
Validity is ledger-bounded, not wall-clock: the auth entry expires
ceil(maxTimeoutSeconds / estimatedLedgerSeconds) ledgers after creation —
~12 ledgers ≈ 60 s at the spec's illustrative 60 s default (F-034). The stock
@x402/express middleware actually defaults maxTimeoutSeconds to 300, not 60
(the F-066 note), so short expiries usually mean a seller set a tight value or a
payload was held too long before submission. An expired payload surfaces as
invalid_exact_stellar_payload_simulation_failed: the Soroban host refuses the
expired entry during mandatory re-simulation (F-064).
Why does a rejected payment return HTTP 200?
Because the exchange succeeded — it is the payment that is invalid. /verify
returns 200 with isValid: false and a reason code; /settle returns 200 with
success: false — matching the reference facilitator, with 4xx reserved for
requests that could not be interpreted as an x402 exchange at all
(ARCHITECTURE §3.2). Branch on isValid / success and the code, never on the
HTTP status.
Why does search return resources while list returns items?
Because the SDK wire types differ, deliberately:
DiscoveryResourcesResponse.items for the list endpoint,
SearchDiscoveryResourcesResponse.resources for search (F-027). walras
implements the asymmetry exactly, because a stock client would silently read
undefined — an empty result list, not an error — if both were normalized to
one name (D-001).
Why does ?q=... return nothing?
The spec names the search parameter query, not q (F-026, D-006). walras
answers the missing parameter with a 400 carrying
walras_missing_search_query, whose message points at the right name (D-027) —
so a hand-typed q= gets a correction, not an empty result.
Does walras hold my funds?
No. The scheme rejects any payload in which a facilitator address is the
transaction source, operation source, the transfer's from, or an auth-entry
participant (F-035), and the settlement receipt's payer is always the buyer's
address, never the facilitator's (F-038). The transfer is buyer → seller
on-chain; walras only rebuilds, submits, and sponsors the network fee (F-006).
Is mainnet supported?
The configuration accepts stellar:pubnet, which requires an explicit
RPC_URL because pubnet has no public default RPC (F-004). But every live
transcript in evidence.md is stellar:testnet, and mainnet
operation is planned, unaudited today — a third-party security review is
planned before any mainnet production tag (THREAT-MODEL §4).
What does a payment cost?
The buyer pays the resource's price and nothing else — no network fee, no sequence number, because the submitter sponsors the fee (F-006). The operator's cost is measured at 22 973 stroops = 0.0022973 XLM per settlement on the single-submitter path (F-069); the fee-bump path costs 100 stroops more, 23 073 (F-086).
Why did the facilitator refuse to start?
Exit code 78 (EX_CONFIG) means a configuration variable failed validation;
the error message names it, and the process exits before binding a port
(ARCHITECTURE §3.4) — a facilitator that starts half-configured would advertise
capability it cannot honour. Fix the named variable against the generated
configuration reference.
Can I register a listing without paying?
No, by design (D-022). Settlement is registration: every listing in the catalog exists because a real payment settled on-chain, which is the catalog's anti-spam property (D-004). If you need to preview how your extension would validate, the current answer is a testnet settlement; a validation dry-run endpoint is a possibility recorded for the funded build (D-022).
What happens if the catalog database breaks?
Settlements are unaffected: the settle response is produced from the chain
result alone, the indexer never throws by contract, and a forced-failure test
pins settlement success against a deliberately broken store (D-015). Discovery
degrades — the two /discovery/* endpoints fail or serve stale data — until
the store is restored from backup, per the runbook §3. An
internal indexer fault omits the EXTENSION-RESPONSES header entirely rather
than blaming the client's payload (D-025).