Use when an agent already knows several products/categories a buyer needs and wants one…
Use when an agent already knows several products/categories a buyer needs and wants one real Shopify product for each need while staying within one overall item-price budget. Each need.query must already carry the important compatibility and preference detail…
by agent-api-testnet.tim1712.workers.dev · discovered, not yet claimed by its owner · updated 2026-08-30
Mirrored from Coinbase's public x402 Bazaar. The description is the provider's own text and has not been reviewed here; the payment requirements are copied as published.
What it does
Use when an agent already knows several products/categories a buyer needs and wants one real Shopify product for each need while staying within one overall item-price budget. Each need.query must already carry the important compatibility and preference details; this service does not reinterpret intent. Returns a cross-merchant basket plan with per-item checkout URLs. It is not a generic product search and does not create carts or checkouts.
Tags: bazaar
Use with an agent
- Discover. Agents find this listing with
GET https://bazaar.saylorinnovations.com/discovery/search?query=…, the MCP toolsearch_resources, or/discovery/resources. - Inspect. Fetch
/resources/8366.jsonfor the price and payment options. - Pay. Call
GET https://agent-api-testnet.tim1712.workers.dev/v1/shopping/budget-basket. The provider answers402with its payment requirements. An x402 client signs one of the options below and retries withPAYMENT-SIGNATURE. - Execute. The provider returns
200with the data. Agent Bazaar is not in the request path and never sees your payment.
For humans
You don't need an account or an API key; you need a wallet holding a small amount of USDC on Base Sepolia, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- see accepts
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base Sepolia
- Uptime
- 1 of the last 1 checks answered
- Calls (30d)
- 4 · 1 unique payers (third-party data from the public x402 Bazaar)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base Sepolia eip155:84532 | USDC | 30000 | 0x5229384BD502D85aa7EcA0A31B515E5E48d3910F | 300s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:84532",
"payTo": "0x5229384BD502D85aa7EcA0A31B515E5E48d3910F",
"asset": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"amount": "30000",
"maxTimeoutSeconds": 300
}
]Schemas
Output schema (JSON Schema)
{
"bazaar": {
"info": {
"input": {
"body": {
"budgetMinor": 60000,
"country": "NL",
"currency": "EUR",
"needs": [
{
"id": "microphone",
"maxPriceMinor": 20000,
"priority": 10,
"query": "wireless lavalier microphone for iPhone USB-C"
},
{
"id": "power-bank",
"maxPriceMinor": 15000,
"priority": 6,
"query": "65W USB-C power bank 20000mAh airline safe"
},
{
"id": "tripod",
"priority": 4,
"query": "compact travel tripod aluminium under 1.2kg"
}
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"budgetMinor": 60000,
"budgetScope": "items_only",
"checkedAt": "2026-08-30T10:00:02.000Z",
"complete": true,
"country": "NL",
"currency": "EUR",
"items": [
{
"checkoutUrl": "https://example-merch.example/cart/2222222222:1",
"currency": "EUR",
"needId": "microphone",
"priceMinor": 17999,
"priority": 10,
"productId": "gid://shopify/Product/1111111111",
"productTitle": "USB-C Wireless Lavalier Microphone",
"productUrl": "https://example-merch.example/products/usb-c-wireless-lavalier",
"query": "wireless lavalier microphone for iPhone USB-C",
"rating": {
"count": 214,
"value": 4.6
},
"searchRank": 0,
"seller": {
"domain": "example-merch.example",
"name": "Example Merch",
"url": "https://example-merch.example"
},
"variantId": "gid://shopify/ProductVariant/2222222222",
"variantTitle": "Single mic + USB-C receiver"
},
{
"checkoutUrl": "https://poweredup.example/cart/4444444444:1",
"currency": "EUR",
"needId": "power-bank",
"priceMinor": 13299,
"priority": 6,
"productId": "gid://shopify/Product/3333333333",
"productTitle": "20000mAh 65W USB-C Power Bank",
"productUrl": "https://poweredup.example/products/pb-20000-65w",
"query": "65W USB-C power bank 20000mAh airline safe",
"rating": {
"count": 88,
"value": 4.4
},
"searchRank": 1,
"seller": {
"domain": "poweredup.example",
"name": "PoweredUp",
"url": "https://poweredup.example"
},
"variantId": "gid://shopify/ProductVariant/4444444444",
"variantTitle": null
},
{
"checkoutUrl": "https://tripodworld.example/cart/6666666666:1",
"currency": "EUR",
"needId": "tripod",
"priceMinor": 9999,
"priority": 4,
"productId": "gid://shopify/Product/5555555555",
"productTitle": "Aluminium Travel Tripod 1.1kg",
"productUrl": "https://tripodworld.example/products/alu-travel-tripod",
"query": "compact travel tripod aluminium under 1.2kg",
"rating": null,
"searchRank": 0,
"seller": {
"domain": "tripodworld.example",
"name": "Tripod World",
"url": "https://tripodworld.example"
},
"variantId": "gid://shopify/ProductVariant/6666666666",
"variantTitle": "Black"
}
],
"remainingMinor": 18703,
"source": "shopify-global-catalog",
"totalMinor": 41297,
"unresolvedNeeds": [],
"warnings": [
"Shipping, taxes, duties and discounts are not included in the budget."
]
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"budgetMinor": {
"minimum": 0,
"type": "integer"
},
"country": {
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"currency": {
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"needs": {
"items": {
"additionalProperties": false,
"properties": {
"id": {
"pattern": "^[A-Za-z0-9._-]{1,64}$",
"type": "string"
},
"maxPriceMinor": {
"minimum": 0,
"type": "integer"
},
"priority": {
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"query": {
"maxLength": 256,
"minLength": 1,
"type": "string"
}
},
"required": [
"id",
"query"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"country",
"currency",
"budgetMinor",
"needs"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"additionalProperties": false,
"properties": {
"budgetMinor": {
"minimum": 0,
"type": "integer"
},
"budgetScope": {
"const": "items_only",
"type": "string"
},
"checkedAt": {
"type": "string"
},
"complete": {
"type": "boolean"
},
"country": {
"pattern": "^[A-Z]{2}$",
"type": "string"
},
"currency": {
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"items": {
"items": {
"additionalProperties": false,
"properties": {
"checkoutUrl": {
"type": "string"
},
"currency": {
"pattern": "^[A-Z]{3}$",
"type": "string"
},
"needId": {
"type": "string"
},
"priceMinor": {
"minimum": 0,
"type": "integer"
},
"priority": {
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"productId": {
"type": "string"
},
"productTitle": {
"type": "string"
},
"productUrl": {
"type": "string"
},
"query": {
"type": "string"
},
"rating": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"count": {
"minimum": 0,
"type": "integer"
},
"value": {
"type": "number"
}
},
"required": [
"value",
"count"
],
"type": "object"
},
{
"type": "null"
}
]
},
"searchRank": {
"minimum": 0,
"type": "integer"
},
"seller": {
"anyOf": [
{
"additionalProperties": false,
"properties": {
"domain": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"domain",
"url"
],
"type": "object"
},
{
"type": "null"
}
]
},
"variantId": {
"type": "string"
},
"variantTitle": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
}
},
"required": [
"needId",
"query",
"priority",
"productId",
"variantId",
"productTitle",
"variantTitle",
"priceMinor",
"currency",
"productUrl",
"checkoutUrl",
"seller",
"rating",
"searchRank"
],
"type": "object"
},
"type": "array"
},
"remainingMinor": {
"minimum": 0,
"type": "integer"
},
"source": {
"const": "shopify-global-catalog",
"type": "string"
},
"totalMinor": {
"minimum": 0,
"type": "integer"
},
"unresolvedNeeds": {
"items": {
"additionalProperties": false,
"properties": {
"needId": {
"type": "string"
},
"reason": {
"enum": [
"no_matching_products",
"budget_exceeded"
],
"type": "string"
}
},
"required": [
"needId",
"reason"
],
"type": "object"
},
"type": "array"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"source",
"country",
"currency",
"budgetMinor",
"totalMinor",
"remainingMinor",
"complete",
"items",
"unresolvedNeeds",
"budgetScope",
"warnings",
"checkedAt"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Example shape — generated from the schema, not a captured live response
nullExamples
curl "https://agent-api-testnet.tim1712.workers.dev/v1/shopping/budget-basket"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paidconst res = await fetch("https://agent-api-testnet.tim1712.workers.dev/v1/shopping/budget-basket");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}import httpx
res = httpx.get("https://agent-api-testnet.tim1712.workers.dev/v1/shopping/budget-basket")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- agent-api-testnet.tim1712.workers.dev
- Endpoint
- https://agent-api-testnet.tim1712.workers.dev/v1/shopping/budget-basket
- Machine-readable
/resources/8366.json