-
Notifications
You must be signed in to change notification settings - Fork 10k
add agents x402 docs #25326
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add agents x402 docs #25326
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,172 @@ | ||||||
| --- | ||||||
| title: x402 | ||||||
| pcx_content_type: navigation | ||||||
| sidebar: | ||||||
| order: 5 | ||||||
| group: | ||||||
| hideIndex: false | ||||||
| --- | ||||||
|
|
||||||
| ## What is x402? | ||||||
|
|
||||||
| [x402](https://www.x402.org/) is an open payment standard that enables services to charge for access to their APIs and content directly over HTTP. It is built around the HTTP 402 Payment Required status code and allows clients to programmatically pay for resources without accounts, sessions, or credential management. | ||||||
|
|
||||||
| ## x402 Workers and Agents | ||||||
|
|
||||||
| You can now create paywalled endpoints in your Workers and query any x402 server from your agent by wrapping the `fetch` with x402 and your wallet. | ||||||
|
|
||||||
| ```ts | ||||||
| import { Hono } from "hono"; | ||||||
| import { Agent, getAgentByName } from "agents"; | ||||||
| import { wrapFetchWithPayment } from "x402-fetch"; | ||||||
| import { paymentMiddleware } from "x402-hono"; | ||||||
|
|
||||||
| // This allows us to create a wallet from just a private key | ||||||
| import { privateKeyToAccount } from "viem/accounts"; | ||||||
|
|
||||||
| // We create an Agent that can fetch the protected route and automatically pay. | ||||||
deathbyknowledge marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||||||
| // The agent's wallet must not be empty! You can get test credits | ||||||
| // for base-sepolia here: https://faucet.circle.com/ | ||||||
| export class PayAgent extends Agent<Env> { | ||||||
| fetchWithPay!: ReturnType<typeof wrapFetchWithPayment>; | ||||||
|
|
||||||
| onStart() { | ||||||
| // We instantiate a wallet from which the agent will pay | ||||||
|
||||||
| // We instantiate a wallet from which the agent will pay | |
| // Create a temporary wallet that the agent will use to pay |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My understanding is this is a temporary wallet. Yes? No?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No, privateKeyToAccount is deterministic and always derives the same wallet (I'm not sure of the naming either) from a given private key.
So what's expected is that you only need to load your private key into your Worker's secrets and your wallet will be ready to use.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should this be called "wallet"?
(Since that's how it is described in the sentence above the code snippet and is most specific)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not entirely sure on the difference on wallet vs account. Since the x402 types are Account I'll stick to that wording. I've updated the comments to make it more clear as well.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| // We use the x402 fetch to access our paid endpoint | |
| // Use the x402 compatible fetch (fetchWithPay) to access the paid endpoint |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this something that I need to set myself or do I just use this URL as the default?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AFAIK this one is the official (?) supported payment facilitator that handles payment verifications/settling for servers, and should work for most networks. Some users might want to use different facilitators so they could update it.
In any case, I've added an inline comment to docs on facilitators (https://x402.gitbook.io/x402/core-concepts/facilitator)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Where would someone use this outside of an agent? Example might help
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any application that connects to MCP servers is using some version of an MCP client. The wrapper agents wraps the official MCP client to support paid tool calls (which are not officially part of the spec)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
e.g. Windsurf wants to support MCPs with paid tools, so they'll need an MCP client that can handle payments
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What's HIL?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"Human-in-the-loop", updated it to use that instead to make it more clear
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be an example tool? Otherwise I read this and wondered what this was referencing
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added toolName and toolArgs as parameters to fix this
Uh oh!
There was an error while loading. Please reload this page.