{"name":"PXke x402 marketplace","description":"Composite x402 marketplace on Algorand: start here; services. All under one payTo.","website":"https://x402.pxke.me","logo":"https://algorand.pxke.me/favicon.svg","categories":["meta","services"],"sections":[{"key":"meta","title":"Start here","summary":"Learn how to pay, and see the real settlements this marketplace has taken."},{"key":"services","title":"Services","summary":"PXke's own pay-per-call products: news, file scanning, backup storage."}],"url":"https://algorand-api.pxke.me/","merchant":{"id":"3e5946af2c9756b6","name":"PXke x402 marketplace","payTo":"KSAVOYTVNB7A6NKCM4W2WBOOGFHWH2SEGR5T6OGB7THCAT5E36LDFEBTII"},"network":"algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=","network_name":"mainnet","pay_to":"KSAVOYTVNB7A6NKCM4W2WBOOGFHWH2SEGR5T6OGB7THCAT5E36LDFEBTII","facilitator_url":"https://facilitator.goplausible.xyz/","challenge_tag":"x402-global-challenge","payment_scheme":"exact","assets":[{"symbol":"USDC","asa_id":31566704,"decimals":6},{"symbol":"EURQ","asa_id":2768422954,"decimals":6},{"symbol":"USDQ","asa_id":2768603795,"decimals":6},{"symbol":"goBTC","asa_id":386192725,"decimals":8}],"products":[{"key":"catalog","title":"Catalog","section":"meta","summary":"The merchant-wide discovery document: every live route, its price and how to pay, generated fresh from what create_app() actually registered.","status":"live","entry":"GET /api/v1/x402","auth":"free"},{"key":"news","title":"News Engine","section":"services","summary":"Pay-per-call access to the newspaper's headlines, tag taxonomy, full-text search and full article bodies.","status":"live","entry":"GET /api/v1/x402/news","auth":"free headlines, tags and articles; paid full-text search"},{"key":"scan","title":"Sandboxed file/tarball scan","section":"services","summary":"Fetch a URL server-side and run it through a network-isolated malware/archive scan that never executes the target.","status":"live","entry":"POST /api/v1/x402/scan/url","auth":"paid per scan"},{"key":"storage","title":"Agent backup storage","section":"services","summary":"Store an opaque backup blob billed by the KB actually used, retrieved later by proving control of the same wallet -- no session, no login.","status":"live","entry":"POST /api/v1/x402/storage/backups","auth":"paid to write, by the KB; free wallet-signature-authenticated reads"}],"routes":[{"product":"catalog","method":"GET","path":"/api/v1/x402","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"This document: every live x402 route, its price and how to pay.","input_example":null,"query_params":[],"supports_preview":false,"supports_promo":false},{"product":"catalog","method":"GET","path":"/api/v1/x402/settlements/recent","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, rate-limited proof-of-volume feed: real (non-operator) settlements across every product, newest first, bounded. Our own probe payments are excluded, never counted here as customer volume. An empty recent window includes a pointer to our facilitator merchant page for independent verification, rather than a bare empty list.","input_example":null,"query_params":[],"supports_preview":false,"supports_promo":false},{"product":"catalog","method":"GET","path":"/api/v1/x402/settlements","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, rate-limited proof-of-volume feed: real (non-operator) settlements across every product, newest first, bounded. Our own probe payments are excluded, never counted here as customer volume. An empty recent window includes a pointer to our facilitator merchant page for independent verification, rather than a bare empty list.","input_example":null,"query_params":[],"supports_preview":false,"supports_promo":false},{"product":"news","method":"GET","path":"/api/v1/x402/news","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Latest published headlines with ids and slugs; ?tag=, ?limit= and ?lang= (title/summary in a stored translation language where one exists).","input_example":null,"query_params":[{"name":"tag","required":false,"example":"defi","description":"One topic tag."},{"name":"limit","required":false,"example":10,"description":"Result cap, clamped server-side."},{"name":"lang","required":false,"example":"fr","description":"Two-letter language code; a stored translation where one exists, else English."}],"supports_preview":false,"supports_promo":false},{"product":"news","method":"GET","path":"/api/v1/x402/news/tags","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free: the newspaper's live tag taxonomy -- per-tag article count, readership and recency, sorted by coverage; ?limit=. The discovery surface for the headline list's ?tag= filter.","input_example":null,"query_params":[{"name":"limit","required":false,"example":10,"description":"Result cap, clamped server-side."}],"supports_preview":false,"supports_promo":false},{"product":"news","method":"GET","path":"/api/v1/x402/news/search","paid":true,"price_usd":"$0.001","price_unit":null,"price_display":"$0.001","resource":"x402-news-search","description":"Ranked full-text search over every published article; ?q= and ?limit=. One of the cheapest calls in the marketplace -- built to be called repeatedly in an agent loop, not once per session.","input_example":{"q":"tinyman volume","limit":10},"query_params":[{"name":"q","required":true,"example":"tinyman volume","description":""},{"name":"limit","required":false,"example":10,"description":"Result cap, clamped server-side."}],"supports_preview":true,"supports_promo":true},{"product":"news","method":"GET","path":"/api/v1/x402/news/articles/:article_id","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free: one published article in full (body markdown, sources, translations) by uuid or slug; ?lang= serves a stored translation (the payload's lang field says which language was actually served).","input_example":{"article_id":"tinyman-v2-crosses-1b-cumulative-volume"},"query_params":[{"name":"lang","required":false,"example":"fr","description":"Two-letter language code; a stored translation where one exists, else English."}],"supports_preview":false,"supports_promo":false},{"product":"scan","method":"POST","path":"/api/v1/x402/scan/url","paid":true,"price_usd":"$0.01","price_unit":null,"price_display":"$0.01","resource":"x402-scan-url","description":"Static security scan of a file fetched from a URL: known-malware signature match (ClamAV), file-type verification, entropy, embedded URL/IP extraction, and a zip/tar-bomb-safe archive member listing with the same checks applied per member. The target is downloaded server-side and scanned in a network-isolated sandbox that never executes it. Supports ?preview=true for a free, redacted, unpaid, rate-limited fixed example of the same response shape.","input_example":{"url":"https://api.example.com/v1/quote"},"query_params":[],"supports_preview":true,"supports_promo":true},{"product":"storage","method":"POST","path":"/api/v1/x402/storage/auth/challenge","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free (JSON body: wallet): mint a short-TTL, single-use nonce for one wallet to sign, proving control for exactly one following wallet-signature-authenticated GET/DELETE /storage/backups call (query params: wallet, nonce, signature_b64, optional proof_method). No session is ever created -- sign the returned signing_message and present it fresh on the next call.","input_example":{"wallet":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"query_params":[],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"POST","path":"/api/v1/x402/storage/auth/nonce","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free (JSON body: wallet): mint a short-TTL, single-use nonce for one wallet to sign, proving control for exactly one following wallet-signature-authenticated GET/DELETE /storage/backups call (query params: wallet, nonce, signature_b64, optional proof_method). No session is ever created -- sign the returned signing_message and present it fresh on the next call.","input_example":{"wallet":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"query_params":[],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"POST","path":"/api/v1/x402/storage/backups","paid":true,"price_usd":"$0.000001953125","price_unit":"KB","price_display":"$0.002 / MB / 90 days","resource":"x402-storage-backup-create","description":"Store one opaque backup blob (JSON body: base64 data, optional label; query param declared_size_bytes=<N>, capped at 10 MB, billed by the KB actually used, never rounded up to a whole MB; optional query param retention_days=<1-90>, default 90), priced at max($0.001, ceil(N/1KB) * $0.000001953125 per KB * retention_days/90). Overall remaining life is still capped at 90 days from now. Retrieve or delete it later by proving control of this same wallet again -- no session. Stored content is OPAQUE: never scanned, indexed, or acted on by us. Not confidential from us, though -- an operator can inspect or remove a specific backup for abuse/legal response (no other agent can read or list your backups). Encrypt sensitive data yourself before uploading if that matters to you -- see docs/x402-storage-encryption-guide.md for a copy-paste recipe. Need more than one version? The versions sub-route below adds a new version under this same backup_id without losing the old ones.","input_example":{"data":"<base64>","label":"my-agent-state-backup"},"query_params":[{"name":"declared_size_bytes","required":true,"example":2048,"description":"The backup's decoded size in bytes; the price is computed from it."},{"name":"retention_days","required":false,"example":90,"description":"Retention term in days."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"GET","path":"/api/v1/x402/storage/backups","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, wallet-signature-authenticated (query params: wallet, nonce, signature_b64, optional proof_method, from the challenge above; optional query param limit): this wallet's own active, unexpired backups, newest first.","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"Your address."},{"name":"nonce","required":true,"example":"<nonce>","description":"From POST /api/v1/x402/storage/auth/nonce."},{"name":"signature_b64","required":true,"example":"<base64 signature>","description":"Base64 signature of that response's signing_message by the wallet's key."},{"name":"proof_method","required":false,"example":"signed_bytes","description":"signed_bytes (default) or legacy_message."},{"name":"limit","required":false,"example":10,"description":"Result cap, clamped server-side."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"GET","path":"/api/v1/x402/storage/backups/:backup_id","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, wallet-signature-authenticated, owner-only: one backup's metadata (including current_version) plus its CURRENT version's restored bytes (base64), sha256-verified against the hash taken at upload time. See the versions sub-routes below to fetch an older version instead.","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"Your address."},{"name":"nonce","required":true,"example":"<nonce>","description":"From POST /api/v1/x402/storage/auth/nonce."},{"name":"signature_b64","required":true,"example":"<base64 signature>","description":"Base64 signature of that response's signing_message by the wallet's key."},{"name":"proof_method","required":false,"example":"signed_bytes","description":"signed_bytes (default) or legacy_message."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"POST","path":"/api/v1/x402/storage/backups/:backup_id/renew","paid":true,"price_usd":"$0.000001953125","price_unit":"KB","price_display":"$0.002 / MB / 90 days","resource":"x402-storage-backup-renew","description":"Extend an existing backup's retrieval window by one full 90-day term, capped at 90 days remaining from now (no request body; query param wallet=<the owning address>, a lookup hint only, never proof of ownership), priced from the backup's already-stored size at max($0.001, ceil(size/1KB) * $0.000001953125 per KB) -- always a full term, never a caller-chosen shorter retention (that is create()/add-version()'s own parameter, not this route's). Works during the 2-day grace window after expiry. A backup already at the remaining-term ceiling is refused before payment. Only the wallet that created this backup may renew it: a payment from any other wallet settles but is refused and changes nothing.","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"The address that created this backup -- a lookup hint, never proof of ownership."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"POST","path":"/api/v1/x402/storage/backups/:backup_id/versions","paid":true,"price_usd":"$0.000001953125","price_unit":"KB","price_display":"$0.002 / MB / 90 days","resource":"x402-storage-backup-add-version","description":"Store a NEW version's bytes under an EXISTING backup_id without discarding the versions already stored under it (query param declared_size_bytes=<N>, billed by the KB actually used; optional query param retention_days=<1-90>, default 90, priced identically to the initial store: max($0.001, ceil(N/1KB) * $0.000001953125 per KB * retention_days/90); JSON body: base64 data, optional label; wallet as a query param, same lookup-hint shape as renew above). This version becomes the backup's current content, on its own independent expiry sized by its own retention_days -- older versions keep expiring on their own original schedule, and the backup's own overall retrieval window (capped at 90 days) is untouched by this call. Only the wallet that created this backup may add a version to it: a payment from any other wallet settles but is refused and changes nothing.","input_example":{"data":"<base64>","label":"my-agent-state-backup-v2"},"query_params":[{"name":"declared_size_bytes","required":true,"example":2048,"description":"The backup's decoded size in bytes; the price is computed from it."},{"name":"retention_days","required":false,"example":90,"description":"Retention term in days."},{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"The address that created this backup -- a lookup hint, never proof of ownership."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"GET","path":"/api/v1/x402/storage/backups/:backup_id/versions","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, wallet-signature-authenticated, owner-only (optional query param limit): metadata (version number, size, content_hash, created_at/expires_at) for every version of one backup, newest-version first.","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"Your address."},{"name":"nonce","required":true,"example":"<nonce>","description":"From POST /api/v1/x402/storage/auth/nonce."},{"name":"signature_b64","required":true,"example":"<base64 signature>","description":"Base64 signature of that response's signing_message by the wallet's key."},{"name":"proof_method","required":false,"example":"signed_bytes","description":"signed_bytes (default) or legacy_message."},{"name":"limit","required":false,"example":10,"description":"Result cap, clamped server-side."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"GET","path":"/api/v1/x402/storage/backups/:backup_id/versions/:version","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, wallet-signature-authenticated, owner-only: one specific version's metadata plus its restored bytes (base64), sha256-verified.","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"Your address."},{"name":"nonce","required":true,"example":"<nonce>","description":"From POST /api/v1/x402/storage/auth/nonce."},{"name":"signature_b64","required":true,"example":"<base64 signature>","description":"Base64 signature of that response's signing_message by the wallet's key."},{"name":"proof_method","required":false,"example":"signed_bytes","description":"signed_bytes (default) or legacy_message."}],"supports_preview":false,"supports_promo":false},{"product":"storage","method":"DELETE","path":"/api/v1/x402/storage/backups/:backup_id","paid":false,"price_usd":null,"price_unit":null,"price_display":null,"resource":null,"description":"Free, wallet-signature-authenticated, owner-only: delete one backup outright, every version included (row marked deleted, then connector bytes removed).","input_example":null,"query_params":[{"name":"wallet","required":true,"example":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","description":"Your address."},{"name":"nonce","required":true,"example":"<nonce>","description":"From POST /api/v1/x402/storage/auth/nonce."},{"name":"signature_b64","required":true,"example":"<base64 signature>","description":"Base64 signature of that response's signing_message by the wallet's key."},{"name":"proof_method","required":false,"example":"signed_bytes","description":"signed_bytes (default) or legacy_message."}],"supports_preview":false,"supports_promo":false}]}