feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat: x402 bazaar - #846

Merged
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar
Sep 17, 2025
Merged

feat: x402 bazaar#846
CarsonRoscoe merged 7 commits into
coinbase:mainfrom
phdargen:x402-bazaar

Conversation

@phdargen

@phdargenphdargen commented Sep 17, 2025

Copy link
Copy Markdown
Contributor

Description

  • Added new action to discover x402 services
  • Fixed x402 fetch with payment actions for CdpSmartWalletProvider
    -> this required to bump all x402 packages and implement sign(hash) method in EvmWalletProvider::toSigner()
  • Formatted token amount input/output in human readable format
  • Added new network checks

Tests

Chatbot: typescript/examples/langchain-smart-wallet-chatbot/chatbot.ts
Network: Base Mainnet
Prompt: fetch x402 services, my budget is 0.1 usdc
-------------------
{
"success": true,
"walletNetwork": "base",
"total": 50,
"returned": 10,
"items": [
{
"resource": "https://true-cast-agent.vercel.app/api/trueCast",
"description": "News aggregator and fact-checking service grounded by prediction markets and real-time data sources",
"cost": "0.1 USDC on base network",
"input": {
"bodyFields": {
"castHash": {
"description": "Optional Farcaster cast hash for context-specific verification",
"type": "string"
},
"prompt": {
"description": "The statement, claim, or question to fact-check and verify",
"required": true,
"type": "string"
},
"runGuardrail": {
"description": "Whether to run AWS Bedrock Guardrails validation (default: false)",
"type": "boolean"
},
"storeToPinata": {
"description": "Whether to store the response to IPFS via Pinata (default: false)",
"type": "boolean"
}
},
"bodyType": "json",
"discoverable": true,
"method": "POST",
"type": "http"
},
"output": {
"properties": {
"assessment": {
"description": "The final truth assessment of the query",
"enum": [
"TRUE",
"FALSE",
"PARTIALLY_TRUE",
"UNVERIFIABLE",
"MARKET_SENTIMENT"
],
"type": "string"
},
"confidenceScore": {
"description": "Confidence level in the assessment (0-100)",
"maximum": 100,
"minimum": 0,
"type": "number"
},
"data_sources": {
"description": "Information from data sources used in verification",
"items": {
"properties": {
"name": {
"description": "Name of the data source",
"type": "string"
},
"prompt": {
"description": "Prompt sent to this data source",
"type": "string"
},
"reply": {
"description": "Response from this data source",
"type": "string"
},
"source": {
"description": "Source URL or identifier",
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"guardrail": {
"description": "AWS Bedrock Guardrails validation results (if runGuardrail was true)",
"properties": {
"input": {
"description": "Input validation results",
"type": "object"
},
"output": {
"description": "Output validation results",
"type": "object"
}
},
"type": "object"
},
"ipfs": {
"description": "IPFS storage information (if storeToPinata was true)",
"properties": {
"gatewayUrl": {
"description": "Public gateway URL for the stored response",
"type": "string"
},
"hash": {
"description": "IPFS hash of stored response",
"type": "string"
},
"network": {
"description": "IPFS network used",
"enum": [
"public",
"private"
],
"type": "string"
},
"paymentResponse": {
"description": "Payment transaction details if x402 was used",
"properties": {
"network": {
"type": "string"
},
"payer": {
"type": "string"
},
"success": {
"type": "boolean"
},
"transaction": {
"type": "string"
}
},
"type": "object"
}
},
"type": "object"
},
"metadata": {
"properties": {
"needsExternalData": {
"description": "Whether external data was needed",
"type": "boolean"
},
"processingTimeSec": {
"description": "Time taken to process in seconds",
"type": "number"
},
"promptType": {
"description": "Categorized type of the prompt",
"type": "string"
},
"sourcesUsed": {
"description": "Names of data sources used",
"items": {
"type": "string"
},
"type": "array"
},
"timestamp": {
"description": "ISO timestamp of processing",
"type": "string"
},
"totalSources": {
"description": "Total number of data sources queried",
"type": "number"
}
},
"type": "object"
},
"query": {
"description": "The original user query that was processed",
"type": "string"
},
"reply": {
"description": "The fact-checked response with analysis and conclusions",
"type": "string"
}
},
"required": [
"query",
"reply",
"assessment",
"confidenceScore",
"metadata"
],
"type": "object"
}
},
{
"resource": "https://x402-tools.vercel.app/api/horoscope",
"description": "Get your daily horoscope",
"cost": "0.01 USDC on base network",
"input": {
"discoverable": true,
"method": "GET",
"queryParams": {
"date": "Today's date in format (YYYY-MM-DD)",
"sign": "Zodiac sign (options: aries, taurus, gemini, cancer, leo, virgo, libra, scorpio, sagittarius, capricorn, aquarius, pisces)"
},
"type": "http"
},
"output": {
"properties": {
"horoscope": {
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://x402-demo-discovery-endpoint.vercel.app/protected",
"description": "Demo endpoint for x402 resource discovery",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://smartanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://priceagent-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://x402-hello-agent-production.up.railway.app/api/hello",
"description": "Simple Hello greeting service",
"cost": "0.001 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://ai-test-vnc.alchemytech.cc/x402pay",
"description": "The omnichain settlement layer that enables AI agents to seamlessly pay millions of real-world merchants across SEA, LATAM, and Africa — powered by x402 and USDC.",
"cost": "0.01 USDC on base network",
"input": {
"body_fields": null,
"body_type": null,
"discoverable": true,
"header_fields": null,
"method": "POST",
"query_params": {
"address": "Ethereum address to receive payment",
"appId": "Application ID for identifying request source",
"qrCode": "QR code data containing payment information"
},
"type": "http"
},
"output": {
"properties": {
"bankData": {
"description": "Bank information",
"properties": {
"bankAccountName": {
"description": "Bank account name",
"type": "string"
},
"bankAccountNumber": {
"description": "Bank account number",
"type": "string"
},
"bankCode": {
"description": "Bank code",
"type": "string"
},
"bankName": {
"description": "Bank name",
"type": "string"
}
},
"type": "object"
},
"createTime": {
"description": "Transaction creation time",
"type": "string"
},
"fiatExchangeRate": {
"description": "Fiat exchange rate",
"type": "string"
},
"merchantOrderNo": {
"description": "Merchant order number",
"type": "string"
},
"num": {
"description": "System order number",
"type": "string"
},
"orderAmount": {
"description": "Fiat currency amount",
"type": "string"
},
"orderCurrency": {
"description": "Order fiat currency",
"type": "string"
},
"qrCode": {
"description": "QR code",
"type": "string"
},
"status": {
"description": "Order status",
"type": "string"
},
"usdAmount": {
"description": "USD amount",
"type": "string"
}
},
"type": "object"
}
},
{
"resource": "https://macrotrendsanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://agentanalyst-production.up.railway.app/api/analyze",
"description": "Professional blockchain analysis and insights",
"cost": "0.05 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
},
{
"resource": "https://scoutpay-production.up.railway.app/api/prices",
"description": "Historical cryptocurrency price data",
"cost": "0.01 USDC on base network",
"input": {
"method": "GET",
"type": "http"
}
}
]
}
-------------------
> Here are some x402 services available within your budget of 0.1 USDC:
1. **[News aggregator and fact-checking service](https://true-cast-agent.vercel.app/api/trueCast)**
- **Cost:** 0.1 USDC
- **Description:** Uses prediction markets and real-time data sources for fact-checking.
- **Method:** POST
- **Input required:** Statement or claim to verify.
2. **[Get your daily horoscope](https://x402-tools.vercel.app/api/horoscope)**
- **Cost:** 0.01 USDC
- **Description:** Daily horoscope based on your zodiac sign.
- **Method:** GET
- **Input required:** Zodiac sign and today's date.
3. **[Demo endpoint for x402 resource discovery](https://x402-demo-discovery-endpoint.vercel.app/protected)**
- **Cost:** 0.001 USDC
- **Description:** A demo service.
- **Method:** GET
4. **[Professional blockchain analysis and insights](https://smartanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Provides insights on blockchain data.
- **Method:** GET
5. **[Historical cryptocurrency price data](https://priceagent-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access to historical price data.
- **Method:** GET
6. **[Simple Hello greeting service](https://x402-hello-agent-production.up.railway.app/api/hello)**
- **Cost:** 0.001 USDC
- **Description:** A simple greeting service.
- **Method:** GET
7. **[Omnichain settlement layer](https://ai-test-vnc.alchemytech.cc/x402pay)**
- **Cost:** 0.01 USDC
- **Description:** Enables payments across different platforms.
- **Method:** POST requiring payment info.
8. **[Additional Professional blockchain analysis services](https://macrotrendsanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Another analytic service for blockchain.
- **Method:** GET
9. **[Another Professional blockchain analysis service](https://agentanalyst-production.up.railway.app/api/analyze)**
- **Cost:** 0.05 USDC
- **Description:** Similar insights on blockchain.
- **Method:** GET
10. **[Historical cryptocurrency price data](https://scoutpay-production.up.railway.app/api/prices)**
- **Cost:** 0.01 USDC
- **Description:** Access historical price data.
- **Method:** GET
-------------------
Prompt: fetch https://x402-demo-discovery-endpoint.vercel.app/protected
-------------------
{"status":"error_402_payment_required","acceptablePaymentOptions":[{"scheme":"exact","network":"base","maxAmountRequired":"1000","resource":"https://x402-demo-discovery-endpoint.vercel.app/protected","description":"Demo endpoint for x402 resource discovery","mimeType":"application/json","payTo":"0x021028695EAfDDe60E139D87000a8bd6cB65645e","maxTimeoutSeconds":300,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","outputSchema":{"input":{"type":"http","method":"GET"}},"extra":{"name":"USD Coin","version":"2"}}],"nextSteps":["Inform the user that the requested server replied with a 402 Payment Required response.","The payment options are: 0.001 USDC on base network","Ask the user if they want to retry the request with payment.","Use retry_http_request_with_x402 to retry the request with payment."]}
-------------------
The requested server returned a **402 Payment Required** response. To access the demo endpoint, you will need to pay **0.001 USDC** on the Base network. Would you like to proceed with the payment to retry the request?
-------------------
Prompt: yes
-------------------
{"status":"success","data":..." ","message":"Request completed successfully with payment","details":{"url":"https://x402-demo-discovery-endpoint.vercel.app/protected","method":"GET","paymentUsed":{"network":"base","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","amount":"1000"},"paymentProof":{"transaction":"0x96334990c1996297d382143fa8e6fa1373489bf4a9809094c8f722d03f42286c","network":"base","payer":"0xDb48aB111ea896649547c01aaaE9166DebCe11ae"}}}
-------------------
The request to the demo endpoint was successful! Here are the details:
### Protected Content
- **Message:** Your payment was successful! Enjoy this banger song.
- **Media:** - [Listen to the track](https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/2044190296&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true&visual=true).
You can enjoy the track titled "**x402 (DJ Reppel Remix)**" from the artist **danXkim**! -------------------

Checklist

A couple of things to include in your PR for completeness:

  • Added documentation to all relevant README.md files
  • Added a changelog entry

@cb-heimdall

cb-heimdall commented Sep 17, 2025

Copy link
Copy Markdown

✅ Heimdall Review Status

RequirementStatusMore Info
Reviews1/1
Denominator calculation
Show calculation
1 if user is bot0
1 if user is external0
2 if repo is sensitive0
From .codeflow.yml1
Additional review requirements
Show calculation
Max0
0
From CODEOWNERS0
Global minimum0
Max 1
1
1 if commit is unverified0
Sum1

@github-actionsgithub-actionsBot added documentation Improvements or additions to documentation action provider New action provider wallet provider New wallet provider example New example agent typescript labels Sep 17, 2025
@phdargen

Copy link
Copy Markdown
ContributorAuthor

As the market place grows, might be needed to reduce amount of returned info per service and/or add pagination or additional filters

@CarsonRoscoeCarsonRoscoe left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, will need to add pagination in the future. We also want to add a query based search to discovery that the agents will eventually be more likely to use. But for now this is great, ty!

@CarsonRoscoe
CarsonRoscoe merged commit d34a4cb into coinbase:mainSep 17, 2025
27 checks passed
@phdargenphdargen mentioned this pull request Sep 25, 2025
5 tasks
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

action providerNew action providerdocumentationImprovements or additions to documentationexampleNew example agenttypescriptwallet providerNew wallet provider

Development

Successfully merging this pull request may close these issues.

3 participants

@phdargen@cb-heimdall@CarsonRoscoe