commerce grant). Always read get_service first and pass its requestShape.endpoints[].payServiceArgs through as-is — it carries slug / path / method, and for a verified endpoint a pre-filled body (and sometimes search / headers); don’t drop those and rebuild your own. Where an example filled a path parameter, path already holds that example’s entity (not a {placeholder}) — swap in the entity you want rather than looking for a placeholder to replace.
Auth: key / grant · Charges: real funds
Arguments
A bare slug reaches the service’s base URL. For a multi-endpoint API that is a 404, not a purchase — pass the endpoint’s
path. Only a single-endpoint service is callable by slug alone.Returns
The vendor’s response plus the payment record. A paid result also carriesdelegationId and budget (the spending budget after this call):
paid: truewith a non-2xxupstreamStatusmay still have cost the merchant price.- The
requestblock rides on every result that resolved the endpoint (already_paid,payment_failed, …), not only the paid one. budget: nullmeans it couldn’t be read this time — not that it’s zero; callget_budget.payable: false(withprotocol,priceLabel,network,note; never the upstream URL) means the service isn’t on a payable rail — nothing charged.
Outcomes and refusals
Try it
Ask your assistant:
Pay openweather-mpp for the current weather in Lisbon and show me the response.
Call it directly (⚠️ charges real funds — rehearse on https://mcp.sandbox.nevermined.app/mcp first):