Buy a gift card from ~550 US brands (Amazon, Target, DoorDash, Uber ...) and more count…
Buy a gift card from ~550 US brands (Amazon, Target, DoorDash, Uber ...) and more countries; the card is issued to the agent's owner (registered STB agent key with gift cards turned on required). This call prices one card for a $0.02 USDC fee on Base and retu…
by x402.spendthebits.com · discovered, not yet claimed by its owner · updated 2026-10-05
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
Buy a gift card from ~550 US brands (Amazon, Target, DoorDash, Uber ...) and more countries; the card is issued to the agent's owner (registered STB agent key with gift cards turned on required). This call prices one card for a $0.02 USDC fee on Base and returns the exact USDC total, a pay_url and a claim token. Find product ids and amounts with GET /x402/giftcards/catalog/?country=USA.
Tags: gift-cards · shopping · commerce · payments · usdc · bazaar
Call contract
- Method
- POST
- Input
- json
- Output
- json
- Last paid call
- 2026-10-05
{
"amount": 10,
"brand": "Amazon.com",
"country": "USA",
"product_id": "103188916708"
}{
"brand": "Amazon.com",
"card_url": "https://x402.spendthebits.com/@stb/cards/usa/amazon-com/10/",
"claim_token": "ct_…",
"currency": "USD",
"delivery": "The card appears in the owner's STB app (Gift cards → My orders).",
"face_value": "10.00",
"includes": {
"bridge_fee_ceiling_usdc": "0.014879",
"card_usdc": "11.222121",
"service_fee_usdc": "0.350000"
},
"order_id": "8a3f5b0e-2c4d-4e1f-9b7a-1d2e3f4a5b6c",
"pay_by": 1789934400,
"pay_to": "0x9f272C290Dce7598134B5BAA11AA846DF1eAF4b1",
"pay_url": "https://x402.spendthebits.com/x402/giftcards/orders/8a3f5b0e-2c4d-4e1f-9b7a-1d2e3f4a5b6c/pay/",
"pricing_note": "The card provider's price includes its own spread, which is a larger share of small cards. Compare total_usdc with face_value before paying.",
"redeemable_in": "USA",
"spend_controls_hint": "Set your client's per-payment cap to at least $12 (e.g. @x402/fetch spendControls.maxAmountPerPayment).",
"status": "awaiting_payment",
"status_url": "https://x402.spendthebits.com/x402/giftcards/orders/8a3f5b0e-2c4d-4e1f-9b7a-1d2e3f4a5b6c/",
"total_usdc": "11.587000",
"typical_minutes": 5,
"valid_until": null,
"what_to_expect": "A card usually takes about 5 minutes after payment. Poll status_url with the claim token in the X-Claim-Token header; do not pay again."
}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/26886.jsonfor the price and payment options. - Pay. Call
GET https://x402.spendthebits.com/x402/giftcards/quote/. 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, and an x402-capable client (see the examples below). Call the endpoint unpaid first to see exactly what it asks for.
Pricing & payment
- Price
- $0.02 / request
- Protocol
- x402 v2
- Auth
- No account or API key. Pay per request.
- Networks
- Base
- Demand
- 3 calls · 2 unique payers in 30d (public x402 Bazaar data)
x402 payment requirements
| Scheme | Network | Asset | Amount | Pay to | Timeout |
|---|---|---|---|---|---|
| exact | Base eip155:8453 | USDC | $0.02 | 0xCAB797230Aa7A9cAA2d6Da4AC8b2a06416225cA9 | 120s |
accepts[] (raw JSON)
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0xCAB797230Aa7A9cAA2d6Da4AC8b2a06416225cA9",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "20000",
"amountUsd": 0.02,
"maxTimeoutSeconds": 120
}
]Schemas
Output schema (JSON Schema)
{
"properties": {
"example": {
"properties": {
"ask": {
"type": "object"
},
"brand": {
"type": "string"
},
"card_url": {
"type": [
"string",
"null"
]
},
"claim_token": {
"description": "Secret for status_url; shown once",
"type": "string"
},
"currency": {
"type": "string"
},
"delivery": {
"type": "string"
},
"detail": {
"type": "string"
},
"face_value": {
"description": "Card value in its own currency",
"type": "string"
},
"includes": {
"properties": {
"bridge_fee_ceiling_usdc": {
"type": "string"
},
"card_usdc": {
"type": "string"
},
"service_fee_usdc": {
"type": "string"
}
},
"type": "object"
},
"order_id": {
"description": "Use it in pay_url / status_url",
"type": "string"
},
"pay_by": {
"description": "Unix time the quote lapses",
"type": "integer"
},
"pay_to": {
"description": "Per-order forwarder contract on Base",
"type": "string"
},
"pay_url": {
"description": "x402 URL that takes the payment",
"type": "string"
},
"pricing_note": {
"type": "string"
},
"redeemable_in": {
"type": "string"
},
"referral": {
"type": "object"
},
"spend_controls_hint": {
"type": "string"
},
"status": {
"description": "awaiting_payment, awaiting_owner, paid, completed, declined ...",
"type": "string"
},
"status_url": {
"description": "Poll with the X-Claim-Token header",
"type": "string"
},
"total_usdc": {
"description": "EXACT USDC to pay at pay_url, decimal string",
"type": "string"
},
"typical_minutes": {
"type": "integer"
},
"valid_until": {
"description": "Provider validity date once issued; null until then"
},
"what_to_expect": {
"type": "string"
}
},
"required": [
"order_id",
"status",
"brand",
"face_value",
"currency",
"total_usdc",
"includes",
"pay_to",
"pay_by",
"typical_minutes",
"what_to_expect",
"valid_until"
],
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}Example shape — generated from the schema, not a captured live response
{
"example": {
"ask": {},
"brand": "string",
"card_url": "string",
"claim_token": "string",
"currency": "string",
"delivery": "string",
"detail": "string",
"face_value": "string",
"includes": {
"bridge_fee_ceiling_usdc": "string",
"card_usdc": "string",
"service_fee_usdc": "string"
},
"order_id": "string",
"pay_by": 0,
"pay_to": "string",
"pay_url": "string",
"pricing_note": "string",
"redeemable_in": "string",
"referral": {},
"spend_controls_hint": "string",
"status": "string",
"status_url": "string",
"total_usdc": "string",
"typical_minutes": 0,
"valid_until": null,
"what_to_expect": "string"
},
"type": "string"
}Examples
curl -X POST 'https://x402.spendthebits.com/x402/giftcards/quote/' -H 'Content-Type: application/json' --data '{"amount":10,"brand":"Amazon.com","country":"USA","product_id":"103188916708"}'
# -> 402 Payment Required; read PAYMENT-REQUIRED
# retry the identical request with PAYMENT-SIGNATUREconst res = await fetch("https://x402.spendthebits.com/x402/giftcards/quote/", {
"method": "POST",
"headers": {
"content-type": "application/json"
},
"body": "{\"amount\":10,\"brand\":\"Amazon.com\",\"country\":\"USA\",\"product_id\":\"103188916708\"}"
});
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
import json
res = httpx.request("POST", "https://x402.spendthebits.com/x402/giftcards/quote/", json=json.loads("{\"amount\":10,\"brand\":\"Amazon.com\",\"country\":\"USA\",\"product_id\":\"103188916708\"}"))
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerDetails
- Provider
- x402.spendthebits.com
- Endpoint
- https://x402.spendthebits.com/x402/giftcards/quote/
- Machine-readable
/resources/26886.json