@leash/seller-kit exports a handful of small helpers that don’t
build transactions but every seller integration needs:
- “Which stables can I price in on this network?”
- “Where will my paywall settle through?”
- “Did I write this
pricestring correctly?” - “What’s the on-chain
payTofor this agent?”
/v1/seller/* and /v1/agents/{mint}/pay-to. They do no DB
writes and never call out to a facilitator or RPC node — every
response is a pure derivation from the API’s compile-time registry.
| Endpoint | Mirrors | Use it for |
|---|---|---|
GET /v1/seller/networks | KNOWN_TOKENS + KNOWN_STABLE_SYMBOLS | Currency / network dropdowns |
GET /v1/seller/facilitator | defaultFacilitatorFor + config | Showing the buyer “settles via X” label |
POST /v1/seller/parse-price | parsePrice from seller-kit | Validating a draft price string |
GET /v1/agents/{mint}/pay-to | findAssetSignerPda from mpl-core | Resolving the on-chain payTo |
lsh_test_* keys see devnet
mints, lsh_live_* keys see mainnet mints.
GET /v1/seller/networks
Returns the full per-network token catalog plus the caller’s current
network surfaced as current for convenience.
accepts[] is the same ordered list of stables every paywall and
buyer endpoint uses (USDC, USDT, USDG), so you can wire it
directly into a UI dropdown.
GET /v1/seller/facilitator
Resolves the facilitator URL the caller-scoped network will settle
through, with provenance.
source is "config" when the API operator has pinned
LEASH_API_FACILITATOR_URL, and "default" when we fell back to
the Leash default for the cluster (devnet-facilitator.leash.market on
devnet, facilitator.leash.market on mainnet). Other facilitators can
be used — see Run a Leash facilitator.
UI tip: render this as a small “Settles via ” label next to
your draft payment link so users know exactly which facilitator
will broker the transfer.
POST /v1/seller/parse-price
Parses a display price string into atomic units against the
caller-scoped network’s stablecoin registry, and returns
per-stablecoin equivalents you can preview.
currency to anchor the price to a specific
stable instead of the USDC default:
| Form | Resolves to |
|---|---|
"$0.001" | $0.001 in currency (default USDC). |
"0.5" (bare num) | 0.5 units of currency (default USDC). |
"0.5 USDT" | 0.5 USDT regardless of currency. |
"1000 USDC" | 1000 USDC. |
422 invalid_request with a message
explaining what was tried.
GET /v1/agents/{mint}/pay-to
Resolves the Asset Signer PDA for an agent — the on-chain account
that receives funds when buyers pay through @leash/seller-kit or a
hosted payment link. Pure PDA derivation
via mpl-core; no RPC required.
payTo, so you can render it in a “Funds will land on ”
field without ever touching mpl-core yourself.
Why these exist
The TypeScript SDK already has all of this — it’s justimport { parsePrice, KNOWN_TOKENS, defaultFacilitatorFor } from '@leash/seller-kit'. The HTTP surface exists for two reasons:
- Polyglot SDKs. A Python or Go client can’t
importTypeScript. They get the same answers via REST and stay one release behind nothing. - UIs. Dashboards, internal tools, and the explorer itself
need a single source of truth for “supported currencies on this
network” + “the facilitator we’ll settle through”. The endpoints
make these dropdowns trivial without bundling the entire
@leash/coreregistry into the browser.
See also
@leash/seller-kit— the TypeScript surface these endpoints mirror.- Payment links — uses
parsePriceinternally on every create / patch. - Buyer endpoints — symmetric
currency/networkshelpers for the buyer side.

