Skip to main content
Given a plain-language need, find — and optionally pay, in the same call — the single best payable Catalog service, so your agent doesn’t pick among listings itself. The ranking is deterministic (no model reads the listings) and runs behind a fail-closed payability gate (listed, healthy, moderated, on x402/MPP, not flagged unpayable). When nothing passes, you get an explicit refusal, never a weak match. Needs a credential; charges real funds only with autoPay: true. Auth: key / grant · Charges: real funds if autoPay

Arguments

filters fields: require (exact opaque slug — returned only if payable and healthy, else fails closed with BCK.ROUTER.0031, never substituted), prefer (exact opaque slug, moved up when a payable match), exclude (never chosen), category (matches tags, not category names), protocol (x402 or mpp), network, maxPriceLabel (e.g. "$0.05", best-effort).
With autoPay: true you’re shaping a request for a service you haven’t seen yet. A bare call reaches the winner’s base URL, which for a multi-endpoint API is a 404, not a purchase. An autoPay call also ranks afresh, so it pays whatever wins this time. When the exact service or endpoint matters, propose first (autoPay: false), read get_service on chosen.slug, then pay with pay_service.

Returns

With autoPay: false, a proposal (nothing charged):
  • chosen is the winner; its invokeUrl is the Router’s opaque alias, never the merchant’s host. Pay it by slug.
  • shortlist is the payable candidates in pick order. Each carries a closed matchReason, gateReason, per-item rankingSource, and one scale-specific score. Read the order, not the numbers — the scores sit on different scales. healthy is always true here.
  • With autoPay: true, the same fields plus result (the upstream call and the payment receipt). Read the outcome from result.payment.status — Settled, Issued (attempted, not confirmed) or Failed — not from paid alone. instructions is always present and names the next step.

Refusals

Any other autoPay refusal (cap exceeded, wallet short, card declined) comes back as a plain tool error (isError: true) carrying the Router’s own message — see pay_service’s refusals. If unsure whether it charged, check list_payments and retry only with the same requestId.

Try it

Ask your assistant:
Find the best Nevermined service for the current weather in Lisbon.
Call it directly (autoPay defaults to false, so this proposes and charges nothing):