tiresapi.com
Agent-native car tire intelligence API. One-line MCP setup for Cursor / Claude / ChatGPT. Free trial, x402 paid corpus, car tire fitment, live pricing, and retailer data.
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.
Live 402 challenge
Captured by the enrichment pass, not read just now. Prices can change — always read the 402 the endpoint answers with.
{
"code": "AGENT_TOKEN_REQUIRED",
"mint": {
"connect_page": "https://tiresapi.com/connect",
"wallet_register": "https://tiresapi.com/api/v1/agents/wallet-register"
},
"error": "Authentication required: mint an agent token first.",
"route": "/api/v1/corpus/inventory/history",
"detail": "No agent bearer token was sent. Mint a wallet-bound API key before calling paid routes. Fund or manage your wallet at https://tiresapi.com/connect. Billing order: virtual USD balance is debited first; your wallet is only charged after virtual credit is exhausted. Wallet-bound mint at /connect includes a ~$0.20 starting virtual balance on wallet mint at /connect.",
"accepts": [
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"facilitator": "https://facilitator.xpay.sh",
"facilitatorId": "xpay"
},
"payTo": "0xF0d33a22F716dEE8De9AbE980c01162fE2868b31",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 300
},
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
"facilitatorId": "cdp"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 300
},
{
"asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"extra": {
"name": "USD Coin",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
"facilitatorId": "cdp"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:42161",
"maxTimeoutSeconds": 300
},
{
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"extra": {
"name": "USD Coin",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402",
"facilitatorId": "cdp"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:137",
"maxTimeoutSeconds": 300
},
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2",
"facilitator": "https://facilitator.payai.network",
"facilitatorId": "payai"
},
"payTo": "0xbab109cB9c5d8CEA5809B59C3Cb7bb4Da54F5314",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 300
}
],
"resource": {
"url": "https://tiresapi.com/api/v1/corpus/inventory/history",
"mimeType": "application/json",
"description": "Inventory history walk over inventory_product_detail_history with broad optional filters (size, key_brand_mpc, retailer, state, zip+radius, date range). 200 rows/page. Empty result sets are auto-credited. Set `summary=true` for one-row-per-(tire_size, brand) aggregates (count + min/max/avg/median price + distinct retailers + date range) instead of raw per-store rows — use for severity / band analysis."
},
"retryable": false,
"extensions": {
"bazaar": {
"info": {
"input": {
"type": "http",
"method": "GET",
"queryParams": {
"limit": 50,
"tire_size": "235/55R17",
"brand_tier": "Better,Good,Economy",
"retailer_key": "DISCOUNTTIRE",
"exclude_retailers": "TIRERACK",
"last_extracted_to": "2026-05-01",
"last_extracted_from": "2026-04-01"
}
},
"output": {
"type": "json",
"example": {
"data": [
{
"size": "235/55R17",
"store_num": "1234",
"history_id": 987654321,
"retailer_key": "DISCOUNTTIRE",
"single_price": 142.99,
"key_brand_mpc": "AAECAw",
"last_extracted": "2026-04-15T08:30:00Z"
}
],
"page": {
"cursor": "2026-04-15T08:30:00Z|987654321",
"has_more": true
},
"filters": {
"tire_size": "235/55R17",
"retailer_key": "DISCOUNTTIRE"
}
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET",
"HEAD",
"DELETE"
],
"type": "string"
},
"queryParams": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 200,
"maximum": 200,
"minimum": 1
},
"state": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"cursor": {
"type": "string"
},
"summary": {
"type": "boolean",
"default": false,
"description": "Aggregate-only mode: returns one row per (tire_size, brand) with observation_count, distinct_skus, distinct_retailers, distinct_stores, min/max/avg/median price, first_observed, last_observed — instead of raw per-store rows. Use for severity / band analysis (e.g. insurance claim severity, fleet replacement budgeting). Cursor is ignored."
},
"zip_code": {
"type": "string",
"pattern": "^[0-9]{5}$"
},
"tire_size": {
"type": "string"
},
"brand_tier": {
"type": "string",
"description": "CSV from {Best, Better, Good, Economy} (case-insensitive). Filters by fg_brand_tier; brands not in fg_brand_tier resolve to 'Economy' by contract. Each result row projects `brand_tier`. Discover via GET /api/v1/corpus/facets/brand-tiers."
},
"radius_miles": {
"type": "integer",
"default": 40,
"maximum": 200,
"minimum": 1
},
"retailer_key": {
"type": "string"
},
"key_brand_mpc": {
"type": "string"
},
"exclude_retailers": {
"type": "string",
"description": "CSV of retailer_keys to drop entirely BEFORE rows are paged/aggregated (e.g. 'TIRERACK'). Case-insensitive. Affects both raw rows and the `summary=true` aggregates."
},
"last_extracted_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"last_extracted_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"data",
"page"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"size": {
"type": "string"
},
"brand": {
"type": [
"string",
"null"
]
},
"model": {
"type": [
"string",
"null"
]
},
"state": {
"type": [
"string",
"null"
]
},
"zip_code": {
"type": [
"string",
"null"
]
},
"store_num": {
"type": [
"string",
"null"
]
},
"tire_size": {
"type": "string"
},
"brand_tier": {
"enum": [
"Best",
"Better",
"Good",
"Economy",
null
],
"type": [
"string",
"null"
],
"description": "fg_brand_tier classification. Brands not in fg_brand_tier resolve to 'Economy' by contract."
},
"history_id": {
"type": "integer"
},
"retailer_key": {
"type": "string"
},
"single_price": {
"type": "number"
},
"key_brand_mpc": {
"type": "string",
"description": "Opaque base64url hash of (brand, manufacturer_product_number). Internal cursor key — not a cross-retailer SKU identifier."
},
"last_extracted": {
"type": "string",
"format": "date-time"
},
"store_distance_miles": {
"type": [
"number",
"null"
]
},
"manufacturer_product_number": {
"type": [
"string",
"null"
],
"description": "Canonical cross-retailer SKU code (MPC/MPN). Together with `brand` this is the external key."
}
}
}
},
"meta": {
"type": "object",
"properties": {
"as_of_utc": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"data_source": {
"type": "string"
}
}
},
"page": {
"type": "object",
"required": [
"has_more"
],
"properties": {
"limit": {
"type": "integer",
"description": "Echo of the request limit used for this page."
},
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page; null when done. Wire format: `<last_extracted>|<history_id>`"
},
"has_more": {
"type": "boolean"
}
}
},
"filters": {
"type": "object"
}
}
}
}
}
}
}
},
"tireapi-mpp": {
"info": {
"notes": "No agent token presented. Mint a wallet-bound bearer at /connect.",
"version": 1,
"mint_url": "https://tiresapi.com/connect",
"anonymous": true,
"wallet_pools": []
},
"schema": {
"$id": "https://tiresapi.com/.well-known/x402-extensions/tireapi-mpp.json",
"type": "object",
"title": "tireapi-mpp",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"version",
"anonymous",
"wallet_pools",
"mint_url"
],
"properties": {
"notes": {
"type": "string"
},
"prepay": {
"type": "object",
"properties": {
"min_usd": {
"type": "string"
},
"claim_url": {
"type": "string",
"format": "uri"
},
"receive_address": {
"type": "string"
},
"confirmations_required": {
"type": "integer"
}
},
"description": "Prepay USDC deposit path to refill virtual balance (gift-card credit)."
},
"version": {
"type": "integer",
"const": 1
},
"agent_id": {
"type": [
"integer",
"null"
]
},
"mint_url": {
"type": "string",
"format": "uri",
"description": "Where to send the user to mint or top up a wallet-bound key."
},
"anonymous": {
"type": "boolean",
"default": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Where to send an authenticated user to add allowance to an existing wallet."
},
"mint_source": {
"enum": [
"wallet",
"google",
null
],
"type": [
"string",
"null"
]
},
"wallet_pools": {
"type": "array",
"items": {
"type": "object",
"required": [
"wallet_address",
"is_primary",
"allowance_usd",
"drawn_usd",
"remaining_usd"
],
"properties": {
"chain_id": {
"type": [
"integer",
"null"
]
},
"drawn_usd": {
"type": "string"
},
"is_primary": {
"type": "boolean"
},
"allowance_usd": {
"type": "string"
},
"remaining_usd": {
"type": "string"
},
"wallet_address": {
"type": "string",
"pattern": "^0x[a-f0-9]{40}$"
},
"allowance_signed_utc": {
"type": [
"string",
"null"
]
}
}
}
},
"virtual_balance_usd": {
"type": [
"string",
"null"
],
"description": "Remaining prepaid USD on the agent (debited before any wallet draw)."
}
},
"description": "tiresapi-specific Multi-Payment Profile. Attached to every 402 envelope this server emits so the buyer can see the per-wallet Permit2 budget they signed at mint time vs. how much has been drawn, and the agent's remaining virtual-USD balance. Hint-only — the canonical accepts[] array is still the authoritative payment requirement set.",
"additionalProperties": false
}
}
},
"connect_url": "https://tiresapi.com/connect",
"x402Version": 2,
"billing_reason": "agent_token_required",
"suggested_action": "mint_agent"
}Accepts
The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.
Pay 0.05 USDC on Base to 0xF0d3…68b31. The signed payment is good for 1 minute.
- Paid to
- 0xF0d3…68b31
- USD Coin contract
- 0x8335…02913
- Payment window
- 1 minute
- As published
- 50000 smallest units
Pay 0.05 USDC on Base to 0x68e5…1a8De. The signed payment is good for 1 minute.
- Paid to
- 0x68e5…1a8De
- USD Coin contract
- 0x8335…02913
- Payment window
- 1 minute
- As published
- 50000 smallest units
That figure is in the token’s smallest units. Roundhouse does not hold this contract’s decimals, so it is shown as published rather than converted.
- Paid to
- 0x68e5…1a8De
- Token contract
- 0xaf88…e5831
- Payment window
- 1 minute
That figure is in the token’s smallest units. Roundhouse does not hold this contract’s decimals, so it is shown as published rather than converted.
- Paid to
- 0x68e5…1a8De
- Token contract
- 0x3c49…c3359
- Payment window
- 1 minute
Pay 0.05 USDC on Base to 0xbab1…F5314. The signed payment is good for 1 minute.
- Paid to
- 0xbab1…F5314
- USD Coin contract
- 0x8335…02913
- Payment window
- 1 minute
- As published
- 50000 smallest units
The catalog’s raw entry
[
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USDC",
"version": "2",
"facilitator": "https://facilitator.xpay.sh"
},
"payTo": "0xF0d33a22F716dEE8De9AbE980c01162fE2868b31",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 60
},
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USDC",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 60
},
{
"asset": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
"extra": {
"name": "USDC",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:42161",
"maxTimeoutSeconds": 60
},
{
"asset": "0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359",
"extra": {
"name": "USDC",
"version": "2",
"facilitator": "https://api.cdp.coinbase.com/platform/v2/x402"
},
"payTo": "0x68e58440756916d739E7949f2a8D32496B31a8De",
"amount": "50000",
"scheme": "exact",
"network": "eip155:137",
"maxTimeoutSeconds": 60
},
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USDC",
"version": "2",
"facilitator": "https://facilitator.payai.network"
},
"payTo": "0xbab109cB9c5d8CEA5809B59C3Cb7bb4Da54F5314",
"amount": "50000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 60
}
]Extensions
{
"bazaar": {
"info": {
"input": {
"type": "http",
"queryParams": {
"limit": 50,
"tire_size": "235/55R17",
"brand_tier": "Better,Good,Economy",
"retailer_key": "DISCOUNTTIRE",
"exclude_retailers": "TIRERACK",
"last_extracted_to": "2026-05-01",
"last_extracted_from": "2026-04-01"
}
},
"output": {
"type": "json",
"example": {
"data": [
{
"size": "235/55R17",
"store_num": "1234",
"history_id": 987654321,
"retailer_key": "DISCOUNTTIRE",
"single_price": 142.99,
"key_brand_mpc": "AAECAw",
"last_extracted": "2026-04-15T08:30:00Z"
}
],
"page": {
"cursor": "2026-04-15T08:30:00Z|987654321",
"has_more": true
},
"filters": {
"tire_size": "235/55R17",
"retailer_key": "DISCOUNTTIRE"
}
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method"
],
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"GET",
"HEAD",
"DELETE"
],
"type": "string"
},
"queryParams": {
"type": "object",
"properties": {
"limit": {
"type": "integer",
"default": 200,
"maximum": 200,
"minimum": 1
},
"state": {
"type": "string",
"pattern": "^[A-Z]{2}$"
},
"cursor": {
"type": "string"
},
"summary": {
"type": "boolean",
"default": false,
"description": "Aggregate-only mode: returns one row per (tire_size, brand) with observation_count, distinct_skus, distinct_retailers, distinct_stores, min/max/avg/median price, first_observed, last_observed — instead of raw per-store rows. Use for severity / band analysis (e.g. insurance claim severity, fleet replacement budgeting). Cursor is ignored."
},
"zip_code": {
"type": "string",
"pattern": "^[0-9]{5}$"
},
"tire_size": {
"type": "string"
},
"brand_tier": {
"type": "string",
"description": "CSV from {Best, Better, Good, Economy} (case-insensitive). Filters by fg_brand_tier; brands not in fg_brand_tier resolve to 'Economy' by contract. Each result row projects `brand_tier`. Discover via GET /api/v1/corpus/facets/brand-tiers."
},
"radius_miles": {
"type": "integer",
"default": 40,
"maximum": 200,
"minimum": 1
},
"retailer_key": {
"type": "string"
},
"key_brand_mpc": {
"type": "string"
},
"exclude_retailers": {
"type": "string",
"description": "CSV of retailer_keys to drop entirely BEFORE rows are paged/aggregated (e.g. 'TIRERACK'). Case-insensitive. Affects both raw rows and the `summary=true` aggregates."
},
"last_extracted_to": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"last_extracted_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
}
}
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"required": [
"data",
"page"
],
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"city": {
"type": [
"string",
"null"
]
},
"size": {
"type": "string"
},
"brand": {
"type": [
"string",
"null"
]
},
"model": {
"type": [
"string",
"null"
]
},
"state": {
"type": [
"string",
"null"
]
},
"zip_code": {
"type": [
"string",
"null"
]
},
"store_num": {
"type": [
"string",
"null"
]
},
"tire_size": {
"type": "string"
},
"brand_tier": {
"enum": [
"Best",
"Better",
"Good",
"Economy",
null
],
"type": [
"string",
"null"
],
"description": "fg_brand_tier classification. Brands not in fg_brand_tier resolve to 'Economy' by contract."
},
"history_id": {
"type": "integer"
},
"retailer_key": {
"type": "string"
},
"single_price": {
"type": "number"
},
"key_brand_mpc": {
"type": "string",
"description": "Opaque base64url hash of (brand, manufacturer_product_number). Internal cursor key — not a cross-retailer SKU identifier."
},
"last_extracted": {
"type": "string",
"format": "date-time"
},
"store_distance_miles": {
"type": [
"number",
"null"
]
},
"manufacturer_product_number": {
"type": [
"string",
"null"
],
"description": "Canonical cross-retailer SKU code (MPC/MPN). Together with `brand` this is the external key."
}
}
}
},
"meta": {
"type": "object",
"properties": {
"as_of_utc": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"data_source": {
"type": "string"
}
}
},
"page": {
"type": "object",
"required": [
"has_more"
],
"properties": {
"limit": {
"type": "integer",
"description": "Echo of the request limit used for this page."
},
"cursor": {
"type": [
"string",
"null"
],
"description": "Opaque cursor for the next page; null when done. Wire format: `<last_extracted>|<history_id>`"
},
"has_more": {
"type": "boolean"
}
}
},
"filters": {
"type": "object"
}
}
}
}
}
}
}
},
"tireapi-mpp": {
"info": {
"notes": "Mint a wallet-bound bearer at /connect to fund this agent with a Permit2 budget commitment.",
"version": 1,
"mint_url": "https://tiresapi.com/connect",
"anonymous": true,
"wallet_pools": []
},
"schema": {
"$id": "https://tiresapi.com/.well-known/x402-extensions/tireapi-mpp.json",
"type": "object",
"title": "tireapi-mpp",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"version",
"anonymous",
"wallet_pools",
"mint_url"
],
"properties": {
"notes": {
"type": "string"
},
"prepay": {
"type": "object",
"properties": {
"min_usd": {
"type": "string"
},
"claim_url": {
"type": "string",
"format": "uri"
},
"receive_address": {
"type": "string"
},
"confirmations_required": {
"type": "integer"
}
},
"description": "Prepay USDC deposit path to refill virtual balance (gift-card credit)."
},
"version": {
"type": "integer",
"const": 1
},
"agent_id": {
"type": [
"integer",
"null"
]
},
"mint_url": {
"type": "string",
"format": "uri",
"description": "Where to send the user to mint or top up a wallet-bound key."
},
"anonymous": {
"type": "boolean",
"default": false
},
"topup_url": {
"type": "string",
"format": "uri",
"description": "Where to send an authenticated user to add allowance to an existing wallet."
},
"mint_source": {
"enum": [
"wallet",
"google",
null
],
"type": [
"string",
"null"
]
},
"wallet_pools": {
"type": "array",
"items": {
"type": "object",
"required": [
"wallet_address",
"is_primary",
"allowance_usd",
"drawn_usd",
"remaining_usd"
],
"properties": {
"chain_id": {
"type": [
"integer",
"null"
]
},
"drawn_usd": {
"type": "string"
},
"is_primary": {
"type": "boolean"
},
"allowance_usd": {
"type": "string"
},
"remaining_usd": {
"type": "string"
},
"wallet_address": {
"type": "string",
"pattern": "^0x[a-f0-9]{40}$"
},
"allowance_signed_utc": {
"type": [
"string",
"null"
]
}
}
}
},
"virtual_balance_usd": {
"type": [
"string",
"null"
],
"description": "Remaining prepaid USD on the agent (debited before any wallet draw)."
}
},
"description": "tiresapi-specific Multi-Payment Profile. Attached to every 402 envelope this server emits so the buyer can see the per-wallet Permit2 budget they signed at mint time vs. how much has been drawn, and the agent's remaining virtual-USD balance. Hint-only — the canonical accepts[] array is still the authoritative payment requirement set.",
"additionalProperties": false
}
}
}Provenance
- Seen in the source catalog
- —
- Last indexed by Roundhouse
- 2026-09-21 12:45Z
- Last enriched (probe, favicon, geo)
- 2026-09-21 13:15Z
- x402 version
- 2
- Max timeout
- 60s
- Liveness probe
- HTTP 402
Hand this page to an agent
Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.
GET api.roundhouseai.io/v0/endpoints
Nothing indexed for this service or its provider yet. Not a claim that it is unused — only that we hold no record. Verified volume counts only settlements with an on-chain EIP-3009 marker.
Show the promptHide the prompt
Using Roundhouse, look up the x402 service tiresapi.com and tell me whether it is worth paying: what a call costs, whether the endpoint answered when last probed, and what its payment record actually shows. curl -s 'https://api.roundhouseai.io/v0/endpoints?q=tiresapi.com' curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>' Then call it: read the price from the live 402 at https://tiresapi.com/api/v1/corpus/inventory/history, never from a cached figure, and pay with an x402 client. The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except /v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402, or use an organization key from https://roundhouseai.io/dashboard/team. If you do not have Roundhouse tools or skills installed, read https://roundhouseai.io/skill.md first — it is the whole procedure.