See it. Verify it. Run it.
Review an example result and the exact request, then connect a browser wallet only after the live x402 price and recipient pass verification. One successful call costs $0.1 USDC on Base.
API Acre never receives your private key; signing stays inside your wallet.
What the result looks like
OpenAPI pytest generator returns structured JSON. The paid call uses your input and displays both the fresh result and settlement receipt below.
Curated static example
{
"request_id": "018f1f54-7f38-7ba2-8dc3-5f90272d9f1a",
"service": "developer.openapi-test-generate",
"version": "1",
"data": {
"documentSha256": "2f27879b24323466c5dbca7df9bf137561b826bd43c318b8642b92f04b17930d",
"openapiVersion": "3.1.0",
"apiTitle": "Widget API",
"baseUrlDefault": "https://api.example.com",
"operationCount": 2,
"generatedTestCount": 2,
"guardedMutationCount": 1,
"truncated": false,
"sourceFileName": "test_openapi_generated.py",
"sourceSha256": "44d05573bd64ef63deb934c9bef7b1ed6c618e4093c9cc7eee8e3a55b12b0f26",
"source": "\"\"\"Generated API smoke tests. Review targets and payloads before running.\"\"\"\n\nimport os\n\nimport pytest\nimport requests\n\nDEFAULT_BASE_URL = 'https://api.example.com'\nBASE_URL = os.environ.get(\"API_BASE_URL\", DEFAULT_BASE_URL).rstrip(\"/\")\nTIMEOUT_SECONDS = 20\n\n\ndef _require_base_url():\n if not BASE_URL:\n pytest.skip(\"Set API_BASE_URL to the API origin\")\n return BASE_URL\n\n\ndef _headers(extra=None):\n headers = dict(extra or {})\n if token := os.environ.get('API_BEARER_TOKEN'):\n headers[\"Authorization\"] = f\"Bearer {token}\"\n if api_key := os.environ.get('API_KEY'):\n headers[\"X-API-Key\"] = api_key\n return headers\n\n\ndef test_gethealth():\n base_url = _require_base_url()\n response = requests.request('GET', base_url + '/health', headers=_headers({}), timeout=TIMEOUT_SECONDS)\n assert response.status_code in [200]\n\[email protected](\n os.environ.get(\"API_ALLOW_MUTATING_TESTS\") != \"1\",\n reason=\"POST test disabled; set API_ALLOW_MUTATING_TESTS=1\",\n)\ndef test_createwidget():\n base_url = _require_base_url()\n response = requests.request('POST', base_url + '/widgets', headers=_headers({}), json={'name': 'Acre'}, timeout=TIMEOUT_SECONDS)\n assert response.status_code in [201]\n",
"operations": [
{
"operationId": "getHealth",
"testName": "test_gethealth",
"method": "GET",
"path": "/health",
"mutatingGuard": false,
"documentedResponses": [
"200"
]
},
{
"operationId": "createWidget",
"testName": "test_createwidget",
"method": "POST",
"path": "/widgets",
"mutatingGuard": true,
"documentedResponses": [
"201"
]
}
],
"requirements": [
"pytest>=8",
"requests>=2.31"
],
"environment": {
"baseUrl": "API_BASE_URL",
"bearerToken": "API_BEARER_TOKEN",
"apiKey": "API_KEY",
"allowMutatingTests": "API_ALLOW_MUTATING_TESTS"
},
"warnings": [],
"execution": {
"sourceSyntaxValidated": true,
"generatedTestsExecuted": false,
"networkRequestsMade": false
}
},
"meta": {
"duration_ms": 42,
"cached": false,
"sources": [],
"warnings": [],
"next_actions": []
}
}1 · Review input and live price
Live price verification runs automatically and never requests a wallet signature or payment. Editing the input invalidates the verified challenge.
2 · Verify and connect
- Price
- Network
- Recipient
- USDC contract
Coinbase Wallet supports a desktop QR code and mobile app handoff; no extension is required. You need USDC on Base. Connecting does not sign or pay, and the later authorization prompt must match the amount and recipient above.
3 · Authorize one call
Connected wallet:
Signing authorizes only the verified amount and recipient for this request. Reject the wallet prompt if anything differs.
Result
Settlement receipt
Browser checkout requires an EVM wallet with USDC on Base. For agents and automated clients, use the official x402 SDK examples.