{"name":"Agentic Compute Storefront","description":"Lease temporary compute — a bare Linux machine or an H100 GPU machine — with SSH access and resource-scoped management tokens. Select the SKU with product_id.","version":"0.1.0","service_url":"https://compute-store.vercel.app","llms_txt_url":"/llms.txt","openapi_url":"/openapi.json","acceptable_use_url":"https://compute-store.vercel.app/acceptable-use","auth":{"type":"lease_capability_tokens","summary":"Paid checkout uses MPP. Management actions require the per-resource capability token returned after paid checkout.","token_handling":["Treat read_token, extend_token, and terminate_token as secrets.","Do not print tokens in logs or user-visible output unless explicitly required.","Use only the token needed for the requested action.","Terminate the machine when the task is complete."]},"products":[{"id":"bare-linux-machine","label":"Bare Linux machine","description":"Temporary Ubuntu Linux VM with SSH access.","provider_default":"hetzner","server_type":"cx23","image":"ubuntu-24.04","location":"fsn1","username":"root","duration_minutes":{"minimum":15,"maximum":360},"pricing":{"currency":"usd","base_fee_cents":99,"unit_amount_cents_per_minute":5},"request_schema":{"type":"object","required":["product_id","duration_minutes","ssh_public_key"],"properties":{"product_id":{"type":"string","const":"bare-linux-machine"},"duration_minutes":{"type":"integer","minimum":15,"maximum":360},"ssh_public_key":{"type":"string","description":"SSH public key to install on the leased machine."}}}},{"id":"gpu-h100-machine","label":"H100 GPU machine","description":"Temporary single-GPU NVIDIA H100 machine with SSH access, provisioned on RunPod.","provider_default":"runpod","server_type":"NVIDIA H100 80GB HBM3","image":"runpod/pytorch:2.2.0-py3.10-cuda12.1.1-devel-ubuntu22.04","location":"US","username":"root","duration_minutes":{"minimum":15,"maximum":360},"pricing":{"currency":"usd","base_fee_cents":199,"unit_amount_cents_per_minute":9},"request_schema":{"type":"object","required":["product_id","duration_minutes","ssh_public_key"],"properties":{"product_id":{"type":"string","const":"gpu-h100-machine"},"duration_minutes":{"type":"integer","minimum":15,"maximum":360},"ssh_public_key":{"type":"string","description":"SSH public key to install on the leased machine."}}}}],"payments":{"protocol":"mpp","processor":"stripe","product_type":"machine_lease","validate_path":"/api/machine/mpp/orders/validate","checkout_path":"/api/machine/mpp/orders","order_status_path":"/api/machine/mpp/orders/{order_id}","challenge_status":402,"idempotency_key":"request_id","methods":["stripe_spt"],"pricing_by_product":{"bare-linux-machine":{"currency":"usd","base_fee_cents":99,"unit_amount_cents_per_minute":5},"gpu-h100-machine":{"currency":"usd","base_fee_cents":199,"unit_amount_cents_per_minute":9}},"environment":"production"},"payment_client_guidance":{"recommended":{"id":"stripe-link-cli-mpp-spt","name":"Stripe Link CLI MPP SPT","summary":"Recommended for agent payments. Decode the MPP challenge, create an approved Stripe Link CLI spend request with credential_type=shared_payment_token, then pay the MPP endpoint with that spend request.","credential_type":"shared_payment_token","command_sequence":["npx @stripe/link-cli mpp decode --challenge '<WWW-Authenticate Payment challenge>'","npx @stripe/link-cli payment-methods list","npx @stripe/link-cli spend-request create --payment-method-id <payment_method_id> --credential-type shared_payment_token --network-id <network_id_from_challenge> --amount 399 --currency usd --context '<100+ character purchase rationale shown to the owner>' --line-item 'name:60 minute bare Linux machine lease,unit_amount:399,quantity:1' --total 'type:total,display_text:Total,amount:399' --request-approval","npx @stripe/link-cli mpp pay {service_url}/api/machine/mpp/orders --spend-request-id <approved_spend_request_id> --method POST --header 'Content-Type: application/json' --data '{\"request_id\":\"<uuid>\",\"product_id\":\"bare-linux-machine\",\"duration_minutes\":60,\"ssh_public_key\":\"ssh-ed25519 ...\"}'"]},"also_supported":[{"id":"generic-mpp-stripe-spt-client","name":"Generic MPP client with Stripe SPT support","summary":"Any client that can read the Payment WWW-Authenticate challenge, create a Stripe Shared Payment Token for the advertised network/profile, and retry with Authorization: Payment is supported.","credential_type":"shared_payment_token"}],"unsupported":[{"id":"link-cli-virtual-card","reason":"Virtual cards are for standard browser/card checkout forms. This API does not expose a card-entry checkout form; use Link CLI MPP SPT instead."},{"id":"manual-card-entry","reason":"This storefront currently exposes an agentic MPP checkout endpoint, not a human Stripe Checkout page."},{"id":"crypto-mpp","reason":"Crypto/Tempo payment challenges are intentionally not advertised or accepted for this storefront."}]},"checkout_guidance":["Choose a product_id and include it in every body (validate, create, and the paid retry). Supported products: bare-linux-machine, gpu-h100-machine. Pricing and duration bounds are per product; read the products list in this manifest.","Generate a UUID request_id and include it in every body. It is the idempotency key: reuse the same request_id (with an otherwise identical body) across validate, the unpaid create, and the paid retry so the same order resolves to the same payment challenge and the same order_id.","Optional preflight: POST /api/machine/mpp/orders/validate with the order body to read the quote and accepted payment methods. No payment is composed and no machine is created.","Use POST /api/machine/mpp/orders for purchases. Do not use POST /api/machines unless the operator explicitly enabled unpaid local/dev provisioning.","The first POST /api/machine/mpp/orders (no credential) returns HTTP 402 with MPP payment challenges and { order_id, status: 'unpaid' }. Inspect the WWW-Authenticate headers and retry the identical body with a Stripe-backed MPP credential.","Production checkout requires live Stripe credentials and a live Stripe Shared Payment Token for the advertised profile.","If the paid retry returns HTTP 402 with credential_status: 'rejected', the credential reached the server but was not accepted (commonly a Shared Payment Token that is approved but not yet chargeable shortly after approval). The 'reason' field carries the detail. Wait a few seconds and retry the same request_id with an identical body; idempotency guarantees at most one charge. A 402 WITHOUT credential_status means no credential was attached.","On success you receive HTTP 202 with the settled order (order_id, payment_status: 'paid') and the machine plus its management tokens. Store the tokens securely and poll the machine with read_token until status is active.","Poll GET /api/machine/mpp/orders/{order_id} for payment_status, or the machine read endpoint for provisioning status.","Terminate the machine with terminate_token as soon as the task is complete."],"usage_policy":{"summary":"Machines may be used only for lawful, authorized development, automation, testing, debugging, and compute tasks.","prohibited_uses":["Spam, unsolicited bulk messaging, phishing, credential harvesting, or impersonation.","Network scanning, vulnerability probing, exploitation, denial-of-service activity, or traffic amplification against systems you do not own or have explicit permission to test.","Malware, botnets, command-and-control infrastructure, cryptojacking, or evasion tooling.","Cryptocurrency mining or other resource-draining workloads unrelated to the stated task.","Hosting, storing, or distributing illegal, infringing, abusive, or deceptive content.","Bypassing access controls, rate limits, geofencing, sanctions controls, or platform safety systems.","Processing highly sensitive data unless you have appropriate authorization, safeguards, and legal basis."],"enforcement":"Machines may be terminated, access may be revoked, and future checkouts may be refused for abuse, suspected abuse, provider complaints, sanctions risk, payment risk, or policy violations."},"endpoints":{"validate":{"method":"POST","path":"/api/machine/mpp/orders/validate","auth":"none","summary":"Preflight: validate the order and return the quote and payment methods. No payment, no machine created."},"checkout":{"method":"POST","path":"/api/machine/mpp/orders","auth":"MPP payment","summary":"Create the order. Without a credential returns 402 with MPP challenges; with Authorization: Payment returns 202 with the settled order and machine."},"order_status":{"method":"GET","path":"/api/machine/mpp/orders/{order_id}","auth":"none","summary":"Poll order payment_status by order_id (derived from request_id)."},"create_dev":{"method":"POST","path":"/api/machines","auth":"none","summary":"Explicitly opt-in unpaid local/dev provisioning path. Use checkout for all purchases."},"read":{"method":"GET","path":"/api/machines/{machine_id}","auth":"Bearer <read_token>"},"extend":{"method":"POST","path":"/api/machines/{machine_id}/extend","auth":"Bearer <extend_token>"},"terminate":{"method":"DELETE","path":"/api/machines/{machine_id}","auth":"Bearer <terminate_token>"}},"operational_guidance":["Create a machine only when a temporary Linux host is required.","Use only for lawful, authorized activity that complies with the acceptable use policy.","Poll with the read token until status is active before using SSH.","Use a live Stripe payment credential for checkout; sandbox payments are not accepted.","Use the extend token only if more time is required and the lease is still useful.","Use the terminate token as soon as the machine is no longer needed.","If a request fails with 401 or 403, do not retry blindly; verify the correct capability token is being used."]}