{"openapi":"3.1.0","info":{"title":"rent.dev API","version":"1.0.0","description":"One endpoint for an AI agent to rent compute. Get a key with one unauthenticated call (`POST /v1/accounts`), fund one prepaid USD balance with x402 USDC or a Stripe pay link, and start sandboxes over this API, MCP (`https://mcp.rent.dev/mcp`) or the unmodified E2B SDK (`E2B_DOMAIN=rent.dev`).\n\nMoney is integer micro-USD (1 USD = 1,000,000). Errors are RFC 9457 `application/problem+json` with a stable `code`; a 402 carries `balance_required_micros` and `topup` links. Long work returns an AIP-151 Operation to poll.\n\nE2B-compatible paths (`/sandboxes`, `/v2/sandboxes`, `/templates`, …) are served on this host without the `/v1` prefix and follow E2B's API.","contact":{"name":"rent.dev","url":"https://rent.dev/docs/rest"}},"servers":[{"url":"https://api.rent.dev"}],"tags":[{"name":"Accounts","description":"Keyless signup, agent keys, wallet login and recovery."},{"name":"Keys","description":"API keys and per-key spend limits."},{"name":"Operations","description":"AIP-151 long-running operations."},{"name":"Quotes","description":"Price per task, own and vendor."},{"name":"Providers","description":"The provider catalog: who sells compute, what they sell and what their terms permit."},{"name":"Status","description":"Service health."},{"name":"Billing","description":"Balance, ledger, Stripe and x402 top-ups, auto-recharge."},{"name":"Sandboxes","description":"Sandboxes on the native API."},{"name":"GPU pods","description":"RunPod GPU pods on your own key."},{"name":"BYOK","description":"Vendor credentials."},{"name":"Usage","description":"Usage and showback."},{"name":"Supply","description":"Partner supply: enrol nodes, manage them and read their earnings."}],"externalDocs":{"description":"Docs","url":"https://rent.dev/docs/rest"},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"`Authorization: Bearer rent_sk_…` (or `e2b_…`), or an OAuth access token from auth.rent.dev."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key","description":"The API key in either spelling, as the E2B SDK sends it."}},"schemas":{"SignupNonce":{"type":"object","properties":{"nonce":{"$ref":"#/components/schemas/Nonce"},"expires_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["nonce","expires_at"]},"Nonce":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$"},"Timestamp":{"type":"string","format":"date-time","description":"RFC 3339 date-time.","example":"2026-11-10T22:00:00.000Z"},"AccountWithKey":{"type":"object","properties":{"account_id":{"$ref":"#/components/schemas/AccountId"},"account":{"$ref":"#/components/schemas/Account"},"api_key":{"$ref":"#/components/schemas/ApiKeyCreated"}},"required":["account_id","account","api_key"]},"AccountId":{"type":"string","pattern":"^acc_[0-9A-HJKMNP-TV-Z]{26}$","description":"acc_ followed by a 26-character ULID.","example":"acc_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"Account":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/AccountId"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"frozen":{"type":"boolean","description":"True while the balance is below zero after a refund or dispute."},"recovery":{"type":"object","properties":{"agent_key":{"type":"boolean"},"wallet":{"type":"boolean"},"passkey":{"type":"boolean"}},"required":["agent_key","wallet","passkey"],"description":"Which recovery methods are bound to the account."}},"required":["id","created_at","frozen","recovery"]},"ApiKeyCreated":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/ApiKeyId"},"prefix":{"type":"string","minLength":12,"maxLength":12},"name":{"type":["string","null"]},"created_at":{"$ref":"#/components/schemas/Timestamp"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"revoked_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"spend_limit_micros":{"type":["integer","null"],"minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"spent_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"secret":{"$ref":"#/components/schemas/ApiKeySecret"}},"required":["id","prefix","name","created_at","last_used_at","revoked_at","spend_limit_micros","spent_micros","secret"],"description":"An API key with its secret, shown once."},"ApiKeyId":{"type":"string","pattern":"^key_[0-9A-HJKMNP-TV-Z]{26}$","description":"key_ followed by a 26-character ULID.","example":"key_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"ApiKeySecret":{"type":"string","pattern":"^rent_sk_[0-9a-f]{64}$","description":"API key secret, shown once. The same key written `e2b_` + the same hex is accepted everywhere.","example":"rent_sk_0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f"},"Problem":{"type":"object","properties":{"type":{"type":"string","description":"URI identifying the problem type."},"title":{"type":"string"},"status":{"type":"integer","minimum":100,"maximum":599},"code":{"$ref":"#/components/schemas/ProblemCode"},"detail":{"type":"string"},"instance":{"type":"string"},"request_id":{"type":"string"},"docs_url":{"type":"string","format":"uri"},"balance_required_micros":{"$ref":"#/components/schemas/Micros","description":"Additional balance, in micro-USD, that would let the request succeed."},"hold_id":{"$ref":"#/components/schemas/HoldId"},"retry_after":{"type":"integer","minimum":0,"description":"Seconds to wait before retrying; mirrors the Retry-After header."},"topup":{"$ref":"#/components/schemas/TopupLinks"},"errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"]},"description":"Per-field details."}},"required":["type","title","status","code"],"description":"RFC 9457 problem details, served as application/problem+json."},"ProblemCode":{"type":"string","enum":["insufficient_balance","account_frozen","key_limit_reached","payment_required","payment_failed","unsupported_parameter","invalid_request","unauthenticated","forbidden","not_found","method_not_allowed","conflict","idempotency_in_flight","gone","idempotency_key_reused","rate_limited","internal_error","not_implemented","vendor_error","no_capacity","vendor_timeout","claim_invalid","claim_proof_invalid","checks_failed","node_exists","supply_link_unavailable","node_revoked","node_suspended","node_replay","probe_in_progress","payout_proof_required","agent_upgrade_required"],"description":"Stable machine-readable error code."},"Micros":{"type":"integer","description":"Integer micro-USD (1 USD = 1,000,000), a safe integer.","example":1500000},"HoldId":{"type":"string","pattern":"^hold_[0-9A-HJKMNP-TV-Z]{26}$","description":"hold_ followed by a 26-character ULID.","example":"hold_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"TopupLinks":{"type":"object","properties":{"checkout_url":{"type":"string","format":"uri","description":"Pay link a person can open; valid 24 hours. No API key needed."},"x402_url":{"type":"string","format":"uri","description":"x402 endpoint that tops up the balance with USDC."}}},"CreateAccountRequest":{"type":"object","properties":{"public_key":{"$ref":"#/components/schemas/Ed25519PublicKey"},"nonce":{"$ref":"#/components/schemas/Nonce"},"signature":{"$ref":"#/components/schemas/Ed25519Signature"}},"additionalProperties":false,"description":"Empty for a keyless account, or all three members to bind an Ed25519 agent key."},"Ed25519PublicKey":{"type":"string","pattern":"^[A-Za-z0-9_-]{43}$","description":"Ed25519 public key: 32 bytes, base64url without padding."},"Ed25519Signature":{"type":"string","pattern":"^[A-Za-z0-9_-]{86}$","description":"Ed25519 signature: 64 bytes, base64url without padding."},"AgentKey":{"type":"object","properties":{"public_key":{"$ref":"#/components/schemas/Ed25519PublicKey"},"account_id":{"$ref":"#/components/schemas/AccountId"},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["public_key","account_id","created_at"]},"SignedNonce":{"type":"object","properties":{"public_key":{"$ref":"#/components/schemas/Ed25519PublicKey"},"nonce":{"$ref":"#/components/schemas/Nonce"},"signature":{"$ref":"#/components/schemas/Ed25519Signature"}},"required":["public_key","nonce","signature"],"additionalProperties":false,"description":"An Ed25519 signature over `rent.dev signup v1\\n{nonce}\\n{public_key}` (signup, binding) or `rent.dev recover v1\\n{nonce}\\n{public_key}` (recovery)."},"WalletLoginRequest":{"type":"object","properties":{"message":{"type":"string","minLength":1,"description":"EIP-4361 (Sign-In with Ethereum) message whose `Nonce` is a nonce from GET /v1/accounts/nonce. EIP-4361 nonces are alphanumeric, so write the nonce's 32 bytes as 64 hex characters; a nonce that is already alphanumeric (no `-` or `_`) is also accepted as is. Single use, spent once the signature verifies."},"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]+$"}},"required":["message","signature"],"additionalProperties":false},"AgentKeyList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AgentKey"}}},"required":["data"],"description":"Every agent key bound to the account, oldest first."},"WalletBindingList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WalletBinding"}}},"required":["data"],"description":"Every wallet bound to the account, oldest first."},"WalletBinding":{"type":"object","properties":{"chain":{"type":"string","pattern":"^eip155:[0-9]+$","description":"CAIP-2 chain.","example":"eip155:8453"},"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Wallet address, lowercase."},"account_id":{"$ref":"#/components/schemas/AccountId"},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["chain","address","account_id","created_at"]},"AccountPersonList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/AccountPerson"}}},"required":["data"],"description":"Every person linked to the account, oldest first."},"AccountPerson":{"type":"object","properties":{"user_id":{"$ref":"#/components/schemas/UserId"},"linked_via":{"type":"string","enum":["passkey","api_key"]},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["user_id","linked_via","created_at"]},"UserId":{"type":"string","pattern":"^usr_[0-9A-HJKMNP-TV-Z]{26}$","description":"usr_ followed by a 26-character ULID.","example":"usr_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"ApiKeyPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ApiKey"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"ApiKey":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/ApiKeyId"},"prefix":{"type":"string","minLength":12,"maxLength":12,"description":"First 12 characters of the secret, for display.","example":"rent_sk_0f0f"},"name":{"type":["string","null"]},"created_at":{"$ref":"#/components/schemas/Timestamp"},"last_used_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"revoked_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"spend_limit_micros":{"type":["integer","null"],"minimum":0,"description":"Lifetime spend this key may capture; null for no limit of its own.","example":0},"spent_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0}},"required":["id","prefix","name","created_at","last_used_at","revoked_at","spend_limit_micros","spent_micros"]},"CreateApiKeyRequest":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":100},"spend_limit_micros":{"type":["integer","null"],"minimum":0,"description":"Integer micro-USD, zero or more.","example":0}},"additionalProperties":false},"UpdateApiKeyRequest":{"type":"object","properties":{"name":{"type":["string","null"],"minLength":1,"maxLength":100},"spend_limit_micros":{"type":["integer","null"],"minimum":0,"description":"New lifetime limit; null removes it.","example":0}},"additionalProperties":false},"Operation":{"type":"object","properties":{"name":{"type":"string","pattern":"^operations\\/op_[0-9A-HJKMNP-TV-Z]{26}$","example":"operations/op_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"metadata":{"$ref":"#/components/schemas/OperationMetadata"},"done":{"type":"boolean"},"error":{"$ref":"#/components/schemas/Problem"},"response":{"anyOf":[{"$ref":"#/components/schemas/Sandbox"},{"$ref":"#/components/schemas/GpuPod"},{"$ref":"#/components/schemas/X402TopupResult"}],"description":"The finished resource, by metadata.kind."}},"required":["name","metadata","done"],"description":"AIP-151 long-running operation. When done, exactly one of error or response."},"OperationMetadata":{"type":"object","properties":{"kind":{"$ref":"#/components/schemas/OperationKind"},"target":{"type":["string","null"]},"create_time":{"$ref":"#/components/schemas/Timestamp"},"update_time":{"$ref":"#/components/schemas/Timestamp"}},"required":["kind","target","create_time","update_time"]},"OperationKind":{"type":"string","enum":["create_sandbox","resume_sandbox","create_gpu_pod","settle_x402"]},"Sandbox":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/LeaseId"},"sandbox_id":{"type":["string","null"],"description":"Upstream sandbox id; null until placed."},"account_id":{"$ref":"#/components/schemas/AccountId"},"state":{"$ref":"#/components/schemas/LeaseState"},"template":{"type":"string","description":"Template alias as the caller named it."},"cpu_count":{"type":"integer","minimum":1},"memory_mb":{"type":"integer","minimum":1},"supplier":{"$ref":"#/components/schemas/Supplier"},"wire":{"$ref":"#/components/schemas/Wire"},"endpoint_id":{"type":"string"},"region":{"type":"string","description":"Generic region label, e.g. us-central."},"billed_by":{"$ref":"#/components/schemas/BilledBy"},"metadata":{"$ref":"#/components/schemas/Metadata"},"auto_pause":{"type":"boolean"},"auto_resume":{"type":"boolean"},"created_at":{"$ref":"#/components/schemas/Timestamp"},"started_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"timeout_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"ended_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"domain":{"type":["string","null"]},"captured_micros":{"type":"integer","minimum":0,"description":"Charged to the balance so far.","example":0},"held_micros":{"type":"integer","minimum":0,"description":"Reserved on the balance and not yet captured.","example":0}},"required":["id","sandbox_id","account_id","state","template","cpu_count","memory_mb","supplier","wire","endpoint_id","region","billed_by","metadata","auto_pause","auto_resume","created_at","started_at","timeout_at","ended_at","domain","captured_micros","held_micros"]},"LeaseId":{"type":"string","pattern":"^lse_[0-9A-HJKMNP-TV-Z]{26}$","description":"lse_ followed by a 26-character ULID.","example":"lse_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"LeaseState":{"type":"string","enum":["requested","placing","running","paused","settling","terminated","failed"]},"Supplier":{"type":"string","enum":["own","byok","partner"]},"Wire":{"type":"string","enum":["e2b","vercel","runpod","rent"]},"BilledBy":{"type":"string","enum":["rent.dev","vendor"]},"Metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"String-to-string metadata.","example":{"task":"lint"}},"GpuPod":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/LeaseId"},"pod_id":{"type":["string","null"],"description":"RunPod pod id; null until created."},"account_id":{"$ref":"#/components/schemas/AccountId"},"credential_id":{"$ref":"#/components/schemas/CredentialId"},"name":{"type":"string","description":"`rent-{lease id}`."},"state":{"$ref":"#/components/schemas/LeaseState"},"gpu_type":{"type":"string","example":"NVIDIA GeForce RTX 4090"},"gpu_count":{"type":"integer","minimum":1},"image":{"type":"string"},"cloud_type":{"type":"string","enum":["SECURE","COMMUNITY"]},"container_disk_gb":{"type":"integer","minimum":0},"volume_gb":{"type":"integer","minimum":0},"ports":{"type":"array","items":{"type":"string"},"example":["8888/http","22/tcp"]},"cost_per_hour_usd":{"oneOf":[{"$ref":"#/components/schemas/UsdDecimal"},{"type":"null"}],"description":"RunPod's hourly price for the pod, billed by RunPod."},"billed_by":{"type":"string","enum":["vendor"]},"created_at":{"$ref":"#/components/schemas/Timestamp"},"started_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"ended_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["id","pod_id","account_id","credential_id","name","state","gpu_type","gpu_count","image","cloud_type","container_disk_gb","volume_gb","ports","cost_per_hour_usd","billed_by","created_at","started_at","ended_at"]},"CredentialId":{"type":"string","pattern":"^cred_[0-9A-HJKMNP-TV-Z]{26}$","description":"cred_ followed by a 26-character ULID.","example":"cred_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"UsdDecimal":{"type":"string","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","description":"Non-negative decimal amount in USD, as a string to keep sub-micro precision.","example":"0.0162"},"X402TopupResult":{"type":"object","properties":{"account_id":{"$ref":"#/components/schemas/AccountId"},"topup":{"$ref":"#/components/schemas/Topup"},"network":{"type":"string","example":"eip155:8453"},"payer":{"type":"string","description":"Paying wallet address."},"transaction":{"type":"string","description":"Settlement transaction hash."},"api_key":{"$ref":"#/components/schemas/ApiKeyCreated","description":"Returned once, when an unauthenticated payment created the account."}},"required":["account_id","topup","network","payer","transaction"]},"Topup":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/TopupId"},"account_id":{"$ref":"#/components/schemas/AccountId"},"rail":{"type":"string","enum":["stripe","x402"]},"kind":{"type":"string","enum":["checkout","auto_recharge","x402"]},"status":{"type":"string","enum":["pending","succeeded","failed"]},"credit_micros":{"type":"integer","minimum":0,"description":"Added to the balance.","example":0},"fee_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"tax_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"ref":{"type":["string","null"],"description":"PaymentIntent id (Stripe) or transaction hash (x402)."},"failure_reason":{"type":["string","null"]},"created_at":{"$ref":"#/components/schemas/Timestamp"},"completed_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["id","account_id","rail","kind","status","credit_micros","fee_micros","tax_micros","ref","failure_reason","created_at","completed_at"]},"TopupId":{"type":"string","pattern":"^top_[0-9A-HJKMNP-TV-Z]{26}$","description":"top_ followed by a 26-character ULID.","example":"top_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"OperationId":{"type":"string","pattern":"^op_[0-9A-HJKMNP-TV-Z]{26}$","description":"op_ followed by a 26-character ULID.","example":"op_01JCZ9Q4M8V7K2T3N5P6R8S0W1"},"QuoteList":{"type":"object","properties":{"generated_at":{"$ref":"#/components/schemas/Timestamp"},"quotes":{"type":"array","items":{"$ref":"#/components/schemas/Quote"}},"gpus":{"type":"array","items":{"$ref":"#/components/schemas/GpuQuoteRow"}}},"required":["generated_at","quotes","gpus"]},"Quote":{"type":"object","properties":{"profile":{"$ref":"#/components/schemas/WorkloadProfile"},"shape":{"$ref":"#/components/schemas/Shape"},"duty":{"type":"number","minimum":0,"maximum":1,"description":"Active-CPU duty assumed."},"task_seconds":{"type":"integer","minimum":1,"description":"Wall-clock length of one task."},"rows":{"type":"array","items":{"$ref":"#/components/schemas/QuoteRow"}}},"required":["profile","shape","duty","task_seconds","rows"]},"WorkloadProfile":{"type":"string","enum":["agent-loop","interactive","workspace"]},"Shape":{"type":"object","properties":{"cpu_count":{"type":"integer","minimum":1,"description":"vCPUs.","example":2},"memory_mb":{"type":"integer","minimum":128,"description":"Memory in MiB.","example":4096}},"required":["cpu_count","memory_mb"]},"QuoteRow":{"type":"object","properties":{"vendor":{"type":"string","example":"rent.dev"},"product":{"type":"string","example":"sandbox"},"billed_by":{"$ref":"#/components/schemas/BilledBy"},"per_task_micros":{"type":"integer","minimum":0,"description":"Price of one task of the quote's profile and shape, in micro-USD.","example":0},"rates":{"type":"array","items":{"$ref":"#/components/schemas/QuoteRate"}},"source_url":{"type":["string","null"],"format":"uri","description":"Public pricing page read."},"read_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["vendor","product","billed_by","per_task_micros","rates","source_url","read_at"]},"QuoteRate":{"type":"object","properties":{"component":{"type":"string","example":"memory"},"usd":{"$ref":"#/components/schemas/UsdDecimal"},"quantity_unit":{"type":"string","example":"GiB"},"time_unit":{"type":["string","null"],"enum":["second","minute","hour","month",null]}},"required":["component","usd","quantity_unit","time_unit"]},"GpuQuoteRow":{"type":"object","properties":{"vendor":{"type":"string","example":"runpod"},"tier":{"type":"string","minLength":1,"example":"secure","description":"The vendor's billing tier, one of `GPU_QUOTE_TIERS`: `secure`, `community`, `on_demand`, `preemptible`, `spot`, `serverless`, `reserved`. Absent when the vendor has one tier."},"gpu_type":{"type":"string","example":"NVIDIA H100 80GB HBM3"},"gpu_model":{"type":"string","minLength":1,"example":"h100-sxm-80gb","description":"Normalised GPU model id from the catalog registry."},"memory_gb":{"type":["integer","null"]},"usd_per_hour":{"oneOf":[{"$ref":"#/components/schemas/UsdDecimal"},{"type":"null"}],"description":"Price of the vendor's quantity unit per hour; null without an hourly figure."},"usd_per_gpu_hour":{"oneOf":[{"$ref":"#/components/schemas/UsdDecimal"},{"type":"null"}],"description":"Price of one GPU per hour, normalised across node and instance rows; null when the row cannot be normalised."},"gpu_count":{"type":"integer","minimum":1,"description":"GPUs per quantity unit this row prices."},"pricing_basis":{"type":"string","enum":["listed","effective_dated","weighted_average","median","floor","advertised_from"],"description":"How the figure was produced: listed, median, floor, …."},"market":{"type":["string","null"],"minLength":1},"commitment_months":{"type":["integer","null"],"minimum":1},"unpriced_reason":{"type":["string","null"],"enum":["monthly_rate","no_time_unit","unknown_gpu_count",null],"description":"Why `usd_per_gpu_hour` is null; null when it is set."},"availability":{"type":["string","null"],"enum":["NONE","LOW","MEDIUM","HIGH",null],"description":"The vendor's own stock reading of the GPU type (`NONE` | `LOW` | `MEDIUM` | `HIGH`), read within the last hour; null when no reading is that fresh."},"billed_by":{"$ref":"#/components/schemas/BilledBy"},"source_url":{"type":["string","null"]},"read_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["vendor","gpu_type","gpu_model","memory_gb","usd_per_hour","usd_per_gpu_hour","gpu_count","pricing_basis","market","commitment_months","unpriced_reason","availability","billed_by","source_url","read_at"]},"ServiceStatus":{"type":"object","properties":{"status":{"type":"string","enum":["ok","degraded","down"]},"generated_at":{"$ref":"#/components/schemas/Timestamp"},"endpoints":{"type":"array","items":{"$ref":"#/components/schemas/EndpointStatus"}},"alerts":{"type":"array","items":{"type":"object","properties":{"level":{"type":"string","enum":["info","warning","critical"]},"title":{"type":"string"},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["level","title","created_at"]},"description":"Open alerts, newest first."}},"required":["status","generated_at","endpoints","alerts"]},"EndpointStatus":{"type":"object","properties":{"id":{"type":"string"},"supplier":{"$ref":"#/components/schemas/Supplier"},"wire":{"$ref":"#/components/schemas/Wire"},"region":{"type":"string"},"health":{"$ref":"#/components/schemas/Health"},"free_slots":{"type":["integer","null"],"minimum":0},"cold_start_p50_ms":{"type":["integer","null"],"minimum":0},"last_heartbeat_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"disk_used_share":{"type":["number","null"],"minimum":0,"maximum":1,"description":"Share of the endpoint's sandbox disk in use, 0 to 1, from its latest heartbeat; null for an endpoint that reports none."},"rates":{"type":"array","items":{"$ref":"#/components/schemas/QuoteRate"},"description":"A partner endpoint's customer rates, as a lease placed on it now would lock them; absent for own and BYOK endpoints."}},"required":["id","supplier","wire","region","health","free_slots","cold_start_p50_ms","last_heartbeat_at","disk_used_share"]},"Health":{"type":"string","enum":["healthy","degraded","down","unknown"]},"ProviderList":{"type":"object","properties":{"catalog_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"generated_at":{"$ref":"#/components/schemas/Timestamp"},"attribution":{"type":"array","items":{"$ref":"#/components/schemas/Attribution"}},"providers":{"type":"array","items":{"$ref":"#/components/schemas/ProviderSummary"}},"offerings":{"type":"array","items":{"$ref":"#/components/schemas/Offering"}},"truncated":{"type":"boolean","description":"True when `limit` cut a requested array."}},"required":["catalog_version","generated_at","attribution","truncated"]},"Attribution":{"type":"object","properties":{"provider_id":{"type":"string","minLength":1},"use":{"type":"string","enum":["fetch_automated","store","display","compare","redistribute","derive"]},"document":{"type":["string","null"],"minLength":1},"obligation":{"type":"string","minLength":1,"description":"The attribution the response must carry beside the provider's figure."},"license":{"type":["string","null"],"minLength":1}},"required":["provider_id","use","document","obligation"]},"ProviderSummary":{"type":"object","properties":{"id":{"type":"string","minLength":1,"example":"runpod"},"name":{"type":"string","minLength":1},"website":{"type":"string","format":"uri"},"supply":{"type":"string","enum":["direct","marketplace","hybrid"]},"status":{"type":"string","enum":["active","pending","defunct"]},"identity":{"$ref":"#/components/schemas/ProviderIdentity"},"capabilities":{"$ref":"#/components/schemas/ProviderCapabilities"},"products":{"type":"array","items":{"$ref":"#/components/schemas/ProviderProduct"}},"pricing":{"$ref":"#/components/schemas/ProviderPricing"},"integration":{"$ref":"#/components/schemas/ProviderIntegration"},"links":{"type":"array","items":{"type":"string","format":"uri"}},"summary_verdict":{"type":"string","enum":["permitted","comparison_banned","competitive_banned","automation_banned","unchecked","defunct"],"description":"Display-only summary of the provider's rights; never a gate."},"agentic":{"type":"boolean"},"clause":{"oneOf":[{"$ref":"#/components/schemas/ProviderClause"},{"type":"null"}],"description":"The `compare` denial that withholds this provider's prices; null when its terms permit comparison."}},"required":["id","name","website","supply","status","identity","capabilities","products","pricing","integration","links","summary_verdict","agentic","clause"]},"ProviderIdentity":{"type":"object","properties":{"legal_name":{"type":"string","minLength":1},"hq_country":{"type":"string","pattern":"^[A-Z]{2}$","example":"US"}},"required":["legal_name","hq_country"]},"ProviderCapabilities":{"type":"object","properties":{"offerings":{"type":"array","items":{"type":"string","minLength":1}},"pricing_types":{"type":"array","items":{"type":"string","enum":["on_demand","spot","reserved","serverless"]}},"interfaces":{"type":"array","items":{"type":"string","minLength":1}},"auth":{"type":"array","items":{"type":"string","minLength":1}}},"required":["offerings","pricing_types","interfaces","auth"]},"ProviderProduct":{"type":"object","properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"capabilities":{"type":"array","items":{"type":"string","minLength":1}},"agentic":{"oneOf":[{"$ref":"#/components/schemas/AgenticClaim"},{"type":"null"}]}},"required":["id","name","capabilities","agentic"]},"AgenticClaim":{"type":"object","properties":{"quote":{"type":"string","minLength":1},"quote_url":{"type":"string","format":"uri"},"lifecycle_url":{"type":"string","format":"uri"},"sdk_url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1,"description":"UTC date the claim was checked."}},"required":["quote","quote_url","lifecycle_url","sdk_url","checked_at"]},"ProviderPricing":{"type":"object","properties":{"model":{"type":"string","enum":["feed","public_api","published_page","third_party","none"]},"source_url":{"type":["string","null"],"format":"uri"},"adapter":{"type":["string","null"],"minLength":1},"cadence":{"type":"string","enum":["realtime","hourly","daily","weekly","monthly","manual"]},"first_party_absent_reason":{"type":["string","null"],"minLength":1}},"required":["model","source_url","adapter","cadence","first_party_absent_reason"]},"ProviderIntegration":{"type":"object","properties":{"adapter":{"type":["string","null"],"minLength":1},"status":{"type":"string","enum":["live","planned","none"]}},"required":["adapter","status"]},"ProviderClause":{"type":"object","properties":{"use":{"type":"string","enum":["fetch_automated","store","display","compare","redistribute","derive"]},"effect":{"type":"string","enum":["allow","deny","unknown"]},"scope":{"type":"string","enum":["internal","published"],"description":"The audience the clause's evidence permission reaches; `published` when omitted. An `internal` scope means the evidence is scoped to internal use."},"document":{"type":["string","null"],"minLength":1},"quote":{"type":["string","null"],"minLength":1},"obligations":{"type":"array","items":{"type":"string","minLength":1}}},"required":["use","effect","document","quote","obligations"]},"Offering":{"type":"object","properties":{"provider_id":{"type":"string","minLength":1,"example":"runpod"},"product":{"type":"string","minLength":1,"example":"pod"},"sku":{"type":"string","minLength":1},"component":{"type":"string","enum":["cpu_active","cpu_provisioned","memory","disk","storage","gpu","creation","egress","other","input_tokens","output_tokens","cached_input_tokens","cached_output_tokens"]},"covers":{"type":"string","enum":["gpu","node","instance","gpu_line_item"],"description":"What the figure covers; a GPU offering always states it, another offering when it selects a divisor."},"figure":{"type":"string","enum":["listed","effective_dated","weighted_average","median","floor","advertised_from"],"description":"How the figure was produced: listed, median, floor, …."},"pricing_type":{"type":"string","enum":["on_demand","spot","reserved","serverless"]},"provenance":{"type":"string","enum":["first_party","third_party"],"description":"`first_party` when the figure was read from the vendor's own page or API; `third_party` when an aggregator produced it."},"usd":{"type":"string","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d+)?$","description":"USD per `per_quantity` of `quantity_unit` per `time_unit`.","example":"3.99"},"per_quantity":{"type":"number","exclusiveMinimum":0},"quantity_unit":{"type":"string","minLength":1},"time_unit":{"type":["string","null"],"enum":["second","minute","hour","month",null]},"unit":{"type":"string","minLength":1},"usd_per_hour":{"type":["string","null"],"description":"Price of the vendor's quantity unit per hour; null without an hourly figure."},"usd_per_gpu_hour":{"type":["string","null"],"description":"Price of one GPU per hour, normalised across node and instance rows; the comparable figure."},"usd_per_vcpu_hour":{"type":["string","null"],"description":"Price of one vCPU per hour, normalised across VM, per-core and per-vCPU rows; the comparable CPU figure."},"unpriced_reason":{"type":["string","null"],"minLength":1,"description":"Why `usd_per_gpu_hour` is null (`monthly_rate`, `no_time_unit`, `unknown_gpu_count`); null when it is set or the row is not a GPU row."},"vcpu_unpriced_reason":{"type":["string","null"],"enum":["monthly_rate","no_time_unit","unknown_vcpu_count",null],"description":"Why `usd_per_vcpu_hour` is null (`monthly_rate`, `no_time_unit`, `unknown_vcpu_count`); null when it is set or the row is not a CPU row."},"gpu":{"oneOf":[{"$ref":"#/components/schemas/OfferingGpu"},{"type":"null"}]},"cpu":{"oneOf":[{"$ref":"#/components/schemas/OfferingCpu"},{"type":"null"}]},"publish_mask":{"$ref":"#/components/schemas/PublishMask","description":"The uses this offering's provider permits for this figure."},"source_url":{"type":"string","format":"uri"},"read_at":{"type":"string","description":"UTC date the page or feed was read."},"last_changed_at":{"type":"string","description":"UTC date the figure last changed."},"third_party":{"type":"boolean"},"feed":{"type":["string","null"],"minLength":1},"market":{"type":"string","minLength":1},"variant":{"type":"string","minLength":1},"region":{"type":"string","minLength":1},"region_id":{"type":["string","null"],"minLength":1,"description":"Canonical region id the vendor's `region` label folds to; null when no region is stated or the label is unmapped."},"comparison_group":{"type":["string","null"],"minLength":1,"description":"Stable id of the comparable unit: GPU model, GPU count, market, pricing_type, canonical region and commitment. Offerings in one group price the same purchasable unit; null on a row that prices no GPU."},"effective_at":{"type":"string","minLength":1},"via":{"type":"string","minLength":1},"via_provider":{"type":"string","minLength":1},"listed_since":{"type":"string","minLength":1},"listing_count":{"type":"integer","exclusiveMinimum":0},"listing_median_usd":{"type":"string"},"listing_max_usd":{"type":"string"},"commitment_months":{"type":"integer","exclusiveMinimum":0},"min_quantity":{"type":"number","exclusiveMinimum":0},"vcpu_per_unit":{"type":"number","exclusiveMinimum":0},"memory_per_vcpu":{"type":"number","exclusiveMinimum":0},"time_increment_s":{"type":"integer","exclusiveMinimum":0},"free_quantity":{"type":"number","exclusiveMinimum":0},"note":{"type":"string","minLength":1}},"required":["provider_id","product","sku","component","figure","pricing_type","provenance","usd","per_quantity","quantity_unit","time_unit","unit","usd_per_hour","usd_per_gpu_hour","usd_per_vcpu_hour","unpriced_reason","vcpu_unpriced_reason","gpu","cpu","publish_mask","source_url","read_at","last_changed_at","third_party","feed","region_id","comparison_group"]},"OfferingGpu":{"type":"object","properties":{"type":{"type":"string","minLength":1,"example":"NVIDIA H100 80GB HBM3"},"model":{"type":"string","minLength":1,"example":"h100-sxm-80gb","description":"Canonical GPU model id from the catalog registry."},"name":{"type":"string","minLength":1},"memory_gb":{"type":["number","null"],"exclusiveMinimum":0},"tier":{"type":["string","null"],"minLength":1},"count":{"type":"number","exclusiveMinimum":0,"description":"GPUs per priced quantity unit."}},"required":["type","model","name","memory_gb","tier","count"]},"OfferingCpu":{"type":"object","properties":{"architecture":{"type":"string","enum":["x86_64","arm64"],"description":"The architecture the vendor states for this CPU row.","example":"x86_64"},"count":{"type":"number","exclusiveMinimum":0,"description":"vCPUs per `quantity_unit`; 1 on a row priced per vCPU."},"class":{"type":["string","null"],"enum":["shared","dedicated",null],"description":"Whether the vCPU is shared or dedicated capacity; null when the vendor does not state it."},"memory_mib":{"type":"number","exclusiveMinimum":0,"description":"RAM of one `quantity_unit` in MiB, on a row that prices a whole VM; absent when the vendor states RAM per vCPU or nothing."}},"required":["architecture","count","class"]},"PublishMask":{"type":"object","properties":{"fetch_automated":{"type":"boolean"},"store":{"type":"boolean"},"display":{"type":"boolean"},"compare":{"type":"boolean"},"redistribute":{"type":"boolean"},"derive":{"type":"boolean"}},"required":["fetch_automated","store","display","compare","redistribute","derive"]},"ProviderDetail":{"type":"object","properties":{"catalog_version":{"type":"string","pattern":"^[a-f0-9]{64}$"},"generated_at":{"$ref":"#/components/schemas/Timestamp"},"attribution":{"type":"array","items":{"$ref":"#/components/schemas/Attribution"}},"provider":{"$ref":"#/components/schemas/Provider"},"offerings":{"type":"array","items":{"$ref":"#/components/schemas/Offering"}}},"required":["catalog_version","generated_at","attribution","provider","offerings"]},"Provider":{"type":"object","properties":{"id":{"type":"string","minLength":1,"example":"runpod"},"name":{"type":"string","minLength":1},"website":{"type":"string","format":"uri"},"supply":{"type":"string","enum":["direct","marketplace","hybrid"]},"status":{"type":"string","enum":["active","pending","defunct"]},"identity":{"$ref":"#/components/schemas/ProviderIdentity"},"capabilities":{"$ref":"#/components/schemas/ProviderCapabilities"},"products":{"type":"array","items":{"$ref":"#/components/schemas/ProviderProduct"}},"pricing":{"$ref":"#/components/schemas/ProviderPricing"},"integration":{"$ref":"#/components/schemas/ProviderIntegration"},"links":{"type":"array","items":{"type":"string","format":"uri"}},"summary_verdict":{"type":"string","enum":["permitted","comparison_banned","competitive_banned","automation_banned","unchecked","defunct"],"description":"Display-only summary of the provider's rights; never a gate."},"agentic":{"type":"boolean"},"clause":{"oneOf":[{"$ref":"#/components/schemas/ProviderClause"},{"type":"null"}],"description":"The `compare` denial that withholds this provider's prices; null when its terms permit comparison."},"terms":{"$ref":"#/components/schemas/ProviderTerms"}},"required":["id","name","website","supply","status","identity","capabilities","products","pricing","integration","links","summary_verdict","agentic","clause","terms"]},"ProviderTerms":{"type":"object","properties":{"documents":{"type":"array","items":{"$ref":"#/components/schemas/ProviderDocument"}},"permissions":{"type":"array","items":{"$ref":"#/components/schemas/ProviderPermission"}}},"required":["documents","permissions"]},"ProviderDocument":{"type":"object","properties":{"id":{"type":"string","minLength":1},"route":{"type":"string","minLength":1},"url":{"type":"string","format":"uri"},"checked_at":{"type":"string","minLength":1},"checked_hash":{"type":"string","pattern":"^[a-f0-9]{64}$"}},"required":["id","route","url","checked_at","checked_hash"]},"ProviderPermission":{"type":"object","properties":{"use":{"type":"string","enum":["fetch_automated","store","display","compare","redistribute","derive"]},"effect":{"type":"string","enum":["allow","deny","unknown"]},"scope":{"type":"string","enum":["internal","published"],"default":"published","description":"The audience the grant reaches; `published` when omitted. `internal` permits the use without permitting its publication."},"document":{"type":["string","null"],"minLength":1},"quote":{"type":["string","null"],"minLength":1},"obligations":{"type":"array","items":{"type":"string","minLength":1}}},"required":["use","effect","document","quote","obligations"]},"Balance":{"type":"object","properties":{"total_micros":{"$ref":"#/components/schemas/Micros","description":"Credits minus captures; may be negative."},"held_micros":{"type":"integer","minimum":0,"description":"Reserved by running work.","example":0},"available_micros":{"$ref":"#/components/schemas/Micros","description":"total - held."},"frozen":{"type":"boolean","description":"Below zero after a refund or dispute: new holds are refused until topped up."},"currency":{"type":"string","enum":["usd"]}},"required":["total_micros","held_micros","available_micros","frozen","currency"]},"LedgerEntryPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LedgerEntry"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"LedgerEntry":{"type":"object","properties":{"id":{"type":"string","description":"Entry id; doubles as its idempotency key, e.g. `stripe:pi:pi_…`."},"kind":{"$ref":"#/components/schemas/LedgerEntryKind"},"amount_micros":{"type":"integer","minimum":1,"description":"Integer micro-USD, at least 1.","example":1000000},"debit":{"$ref":"#/components/schemas/LedgerAccount"},"credit":{"$ref":"#/components/schemas/LedgerAccount"},"ref":{"type":["string","null"],"description":"What the entry refers to: a lease, PaymentIntent, refund or transaction."},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["id","kind","amount_micros","debit","credit","ref","created_at"]},"LedgerEntryKind":{"type":"string","enum":["topup","topup_fee","tax","capture","variance","refund","refund_reversal","dispute","dispute_won","promo"]},"LedgerAccount":{"type":"string","enum":["customer_credit","cash_stripe","cash_x402","tax_collected","revenue_compute","revenue_topup_fee","refunds","disputes","promo","variance"]},"CheckoutSession":{"type":"object","properties":{"checkout_url":{"type":"string","format":"uri"},"session_id":{"type":"string"},"expires_at":{"$ref":"#/components/schemas/Timestamp"},"credit_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"fee_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0}},"required":["checkout_url","session_id","expires_at","credit_micros","fee_micros"]},"CheckoutRequest":{"type":"object","properties":{"amount_usd":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Credits to buy, in USD, at most two decimal places. The fee is added on top.","example":"20.00"}},"required":["amount_usd"],"additionalProperties":false},"SetupSession":{"type":"object","properties":{"checkout_url":{"type":"string","format":"uri"},"session_id":{"type":"string"},"expires_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["checkout_url","session_id","expires_at"],"description":"Checkout Session in setup mode that saves a card or Link method."},"PaymentMethodList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PaymentMethod"}}},"required":["data"]},"PaymentMethod":{"type":"object","properties":{"id":{"type":"string","example":"pm_1Q2w3E4r5T6y7U8i"},"type":{"type":"string","enum":["card","link"]},"brand":{"type":["string","null"]},"last4":{"type":["string","null"]},"exp_month":{"type":["integer","null"],"minimum":1,"maximum":12},"exp_year":{"type":["integer","null"]},"created_at":{"$ref":"#/components/schemas/Timestamp"}},"required":["id","type","brand","last4","exp_month","exp_year","created_at"]},"AutoRecharge":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"amount_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"payment_method_id":{"type":["string","null"]},"disabled_reason":{"type":["string","null"],"description":"Why auto-recharge turned itself off, e.g. a decline or SCA required."},"updated_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["enabled","threshold_micros","amount_micros","payment_method_id","disabled_reason","updated_at"]},"AutoRechargeRequest":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold_usd":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Recharge when available balance falls below this. Required to enable.","example":"10.00"},"amount_usd":{"anyOf":[{"type":"string"},{"type":"number"}],"description":"Credits bought per recharge; the fee is added. Required to enable.","example":"10.00"},"payment_method_id":{"type":"string","minLength":1,"description":"A saved card or Link method. Required to enable."}},"required":["enabled"],"additionalProperties":false},"CreateSandboxRequest":{"type":"object","properties":{"template":{"type":"string","minLength":1,"description":"Template alias: the caller's own or the public set. Default `base`.","example":"code-interpreter-v1"},"timeout_s":{"type":"integer","minimum":1,"maximum":86400,"description":"Seconds until the sandbox stops (or pauses with auto_pause). Default 300."},"metadata":{"$ref":"#/components/schemas/Metadata","description":"Caller metadata. Keys starting `rentdev_` are reserved and dropped."},"env_vars":{"type":"object","additionalProperties":{"type":"string"}},"auto_pause":{"type":"boolean","description":"Pause instead of stopping at the timeout. Default false."},"auto_resume":{"type":"boolean","description":"Resume a paused sandbox when traffic arrives. Default false."},"allow_internet_access":{"type":"boolean"},"network":{"$ref":"#/components/schemas/SandboxNetwork"},"profile":{"$ref":"#/components/schemas/WorkloadProfile","description":"Expected duty, used for placement when no history exists."},"routing":{"$ref":"#/components/schemas/SandboxRouting"}},"additionalProperties":false},"SandboxNetwork":{"type":"object","properties":{"allow_out":{"type":"array","items":{"type":"string","minLength":1},"description":"Allowed egress: CIDR, IP or domain (`*.example.com`). Wins over deny_out."},"deny_out":{"type":"array","items":{"type":"string","minLength":1},"description":"Denied egress: CIDR or IP."},"allow_public_traffic":{"type":"boolean","description":"Whether port URLs accept traffic without the sandbox's traffic token."}},"additionalProperties":false},"SandboxRouting":{"type":"object","properties":{"allow":{"type":"array","items":{"type":"string","minLength":1},"description":"Endpoint ids to consider besides own supply. A BYOK endpoint is a candidate only when listed here and the caller holds a credential for it."},"deny":{"type":"array","items":{"type":"string","minLength":1},"description":"Endpoint ids never to place on."},"max_ready_ms":{"type":"integer","minimum":1,"description":"Hard filter on an endpoint's p95 cold start."},"partners":{"$ref":"#/components/schemas/PartnerRouting","description":"Partner nodes to consider: `none`, `active` nodes only, or `all` (probation nodes too). Default: the environment's setting, `none` unless configured otherwise."}},"additionalProperties":false},"PartnerRouting":{"type":"string","enum":["none","active","all"]},"SandboxPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sandbox"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"ExtendSandboxRequest":{"type":"object","properties":{"timeout_s":{"type":"integer","minimum":1,"maximum":86400,"description":"New timeout, in seconds from now. Takes the added hold first."}},"required":["timeout_s"],"additionalProperties":false},"ResumeSandboxRequest":{"type":"object","properties":{"timeout_s":{"type":"integer","minimum":1,"maximum":86400,"description":"Timeout after resuming, in seconds. Default 300."}},"additionalProperties":false},"ExecResult":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"},"exit_code":{"type":["integer","null"],"description":"Null when killed by the timeout."},"timed_out":{"type":"boolean"},"duration_ms":{"type":"integer","minimum":0}},"required":["stdout","stderr","exit_code","timed_out","duration_ms"]},"ExecRequest":{"type":"object","properties":{"cmd":{"type":"string","minLength":1,"description":"Shell command, run with `/bin/bash -l -c`.","example":"python -c 'print(1)'"},"cwd":{"type":"string"},"env":{"type":"object","additionalProperties":{"type":"string"}},"user":{"type":"string","description":"Default `user`."},"stdin":{"type":"string","description":"Written to stdin, then closed."},"timeout_s":{"type":"integer","minimum":1,"maximum":3600,"description":"Seconds before the command is killed. Default 50."}},"required":["cmd"],"additionalProperties":false},"SandboxProcess":{"type":"object","properties":{"process_id":{"type":"string"},"cmd":{"type":"string"},"started_at":{"$ref":"#/components/schemas/Timestamp"},"running":{"type":"boolean"},"exit_code":{"type":["integer","null"]}},"required":["process_id","cmd","started_at","running","exit_code"]},"StartProcessRequest":{"type":"object","properties":{"cmd":{"type":"string","minLength":1},"cwd":{"type":"string"},"env":{"type":"object","additionalProperties":{"type":"string"}},"user":{"type":"string"},"stdin":{"type":"boolean","description":"Keep stdin open for writes."}},"required":["cmd"],"additionalProperties":false},"ProcessOutput":{"type":"object","properties":{"process_id":{"type":"string"},"chunks":{"type":"array","items":{"type":"object","properties":{"stream":{"type":"string","enum":["stdout","stderr"]},"data":{"type":"string"}},"required":["stream","data"]}},"cursor":{"type":"string","description":"Pass back to read only newer output."},"running":{"type":"boolean"},"exit_code":{"type":["integer","null"]}},"required":["process_id","chunks","cursor","running","exit_code"]},"WriteStdinRequest":{"type":"object","properties":{"data":{"type":"string"},"eof":{"type":"boolean","description":"Close stdin after writing."}},"required":["data"],"additionalProperties":false},"FileList":{"type":"object","properties":{"path":{"type":"string"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/FileEntry"}}},"required":["path","entries"]},"FileEntry":{"type":"object","properties":{"name":{"type":"string"},"path":{"type":"string"},"type":{"type":"string","enum":["file","dir","symlink"]},"size":{"type":"integer","minimum":0},"modified_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"mode":{"type":["integer","null"]}},"required":["name","path","type","size","modified_at","mode"]},"PortUrl":{"type":"object","properties":{"port":{"type":"integer","minimum":1,"maximum":65535},"url":{"type":"string","format":"uri","example":"https://8080-i1a2b3c4d5e6f7g8h.rent.dev"}},"required":["port","url"]},"RunCodeResult":{"type":"object","properties":{"results":{"type":"array","items":{"type":"object","properties":{"is_main_result":{"type":"boolean"},"text":{"type":"string"},"html":{"type":"string"},"markdown":{"type":"string"},"svg":{"type":"string"},"png":{"type":"string","description":"Base64."},"jpeg":{"type":"string","description":"Base64."},"pdf":{"type":"string","description":"Base64."},"latex":{"type":"string"},"json":{},"javascript":{"type":"string"}},"required":["is_main_result"]}},"stdout":{"type":"array","items":{"type":"string"}},"stderr":{"type":"array","items":{"type":"string"}},"error":{"type":["object","null"],"properties":{"name":{"type":"string"},"value":{"type":"string"},"traceback":{"type":"string"}},"required":["name","value","traceback"]},"execution_count":{"type":["integer","null"]}},"required":["results","stdout","stderr","error","execution_count"]},"RunCodeRequest":{"type":"object","properties":{"code":{"type":"string","minLength":1},"language":{"type":"string","enum":["python","javascript","typescript","r","java","bash"],"description":"Default python."},"context_id":{"type":"string","description":"Kernel context to run in; state persists across calls in one context."},"env":{"type":"object","additionalProperties":{"type":"string"}},"timeout_s":{"type":"integer","minimum":1,"maximum":3600,"description":"Default 50."}},"required":["code"],"additionalProperties":false,"description":"Runs on the `code-interpreter-v1` template's Jupyter kernel (port 49999)."},"CreateGpuPodRequest":{"type":"object","properties":{"gpu_type":{"type":"string","minLength":1,"description":"RunPod GPU type id, as listed by its catalog.","example":"NVIDIA GeForce RTX 4090"},"gpu_count":{"type":"integer","minimum":1,"description":"Default 1."},"image":{"type":"string","minLength":1,"example":"runpod/pytorch:2.4.0-py3.11-cuda12.4.1-devel-ubuntu22.04"},"cloud_type":{"type":"string","enum":["SECURE","COMMUNITY"],"description":"Default SECURE."},"container_disk_gb":{"type":"integer","minimum":1,"description":"Default 20."},"volume_gb":{"type":"integer","minimum":0,"description":"Default 0."},"ports":{"type":"array","items":{"type":"string","pattern":"^\\d{1,5}\\/(?:http|tcp)$"}},"env":{"type":"object","additionalProperties":{"type":"string"}},"credential_id":{"$ref":"#/components/schemas/CredentialId","description":"RunPod credential to use; default the account's only RunPod credential."}},"required":["gpu_type","image"],"additionalProperties":false},"GpuPodPage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GpuPod"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"GpuExecResult":{"type":"object","properties":{"stdout":{"type":"string"},"stderr":{"type":"string"},"exit_code":{"type":["integer","null"],"description":"Null when killed by the timeout."},"timed_out":{"type":"boolean","description":"True when RunPod killed the command at `timeout_s`."}},"required":["stdout","stderr","exit_code","timed_out"]},"GpuExecRequest":{"type":"object","properties":{"command":{"type":"string","minLength":1},"timeout_s":{"type":"integer","minimum":1,"description":"Passed to RunPod as `timeoutSeconds`; RunPod accepts 1-25 and caps output at 1 MiB, and its errors pass through."}},"required":["command"],"additionalProperties":false},"ByokCredential":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/CredentialId"},"vendor":{"$ref":"#/components/schemas/Vendor"},"label":{"type":["string","null"]},"created_at":{"$ref":"#/components/schemas/Timestamp"},"validated_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}],"description":"When the vendor last accepted the credential."}},"required":["id","vendor","label","created_at","validated_at"],"description":"A stored vendor credential. Secrets are never returned."},"Vendor":{"type":"string","enum":["e2b","vercel","runpod"]},"CreateByokCredentialRequest":{"oneOf":[{"type":"object","properties":{"vendor":{"type":"string","enum":["e2b"]},"label":{"type":"string","minLength":1,"maxLength":100},"fields":{"type":"object","properties":{"api_key":{"type":"string","minLength":1}},"required":["api_key"],"additionalProperties":false}},"required":["vendor","fields"],"additionalProperties":false},{"type":"object","properties":{"vendor":{"type":"string","enum":["vercel"]},"label":{"type":"string","minLength":1,"maxLength":100},"fields":{"type":"object","properties":{"token":{"type":"string","minLength":1},"team_id":{"type":"string","minLength":1},"project_id":{"type":"string","minLength":1}},"required":["token","team_id","project_id"],"additionalProperties":false}},"required":["vendor","fields"],"additionalProperties":false},{"type":"object","properties":{"vendor":{"type":"string","enum":["runpod"]},"label":{"type":"string","minLength":1,"maxLength":100},"fields":{"type":"object","properties":{"api_key":{"type":"string","minLength":1}},"required":["api_key"],"additionalProperties":false}},"required":["vendor","fields"],"additionalProperties":false}],"description":"Validated with one read-only vendor call before it is stored."},"ByokCredentialList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ByokCredential"}}},"required":["data"]},"ByokCredentialDeleted":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/CredentialId"},"vendor":{"$ref":"#/components/schemas/Vendor"},"orphaned":{"type":"array","items":{"$ref":"#/components/schemas/OrphanedResource"},"description":"Every sandbox and GPU pod created with this credential that was still running (any state but terminated or failed); empty when none."}},"required":["id","vendor","orphaned"]},"OrphanedResource":{"type":"object","properties":{"kind":{"type":"string","enum":["sandbox","gpu_pod"]},"id":{"$ref":"#/components/schemas/LeaseId"},"vendor":{"$ref":"#/components/schemas/Vendor"},"vendor_resource_id":{"type":["string","null"],"description":"The vendor's own id of the sandbox or pod; null if it was never created."}},"required":["kind","id","vendor","vendor_resource_id"],"description":"A sandbox or GPU pod created with the deleted credential that was still running. It keeps running, billed by the vendor to your account there; rent.dev can no longer stop it, run commands in it or read its logs. Terminate it at the vendor."},"UsageReport":{"type":"object","properties":{"from":{"$ref":"#/components/schemas/Timestamp"},"to":{"$ref":"#/components/schemas/Timestamp"},"own_total_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"own":{"type":"array","items":{"$ref":"#/components/schemas/LeaseUsage"}},"byok":{"type":"array","items":{"$ref":"#/components/schemas/ByokUsage"}},"byok_fee_bps":{"type":"integer","minimum":0,"description":"rent.dev's fee on BYOK usage; 0."}},"required":["from","to","own_total_micros","own","byok","byok_fee_bps"]},"LeaseUsage":{"type":"object","properties":{"lease_id":{"$ref":"#/components/schemas/LeaseId"},"kind":{"type":"string","enum":["sandbox","build","gpu_pod"]},"sandbox_id":{"type":["string","null"]},"template":{"type":["string","null"]},"started_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"ended_at":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]},"active_vcpu_seconds":{"type":"number","minimum":0},"provisioned_vcpu_seconds":{"type":"number","minimum":0},"provisioned_gib_seconds":{"type":"number","minimum":0},"cost_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"billed_by":{"type":"string","enum":["rent.dev"]}},"required":["lease_id","kind","sandbox_id","template","started_at","ended_at","active_vcpu_seconds","provisioned_vcpu_seconds","provisioned_gib_seconds","cost_micros","billed_by"]},"ByokUsage":{"type":"object","properties":{"vendor":{"$ref":"#/components/schemas/Vendor"},"credential_id":{"$ref":"#/components/schemas/CredentialId"},"lease_id":{"oneOf":[{"$ref":"#/components/schemas/LeaseId"},{"type":"null"}]},"resource_id":{"type":"string","description":"Vendor's sandbox or pod id."},"period_start":{"$ref":"#/components/schemas/Timestamp"},"period_end":{"$ref":"#/components/schemas/Timestamp"},"estimated_micros":{"type":"integer","minimum":0,"description":"Showback only: the vendor bills this, not rent.dev.","example":0},"source":{"type":"string","enum":["estimate","vendor_billing"],"description":"`estimate` from lifecycle timestamps, `vendor_billing` from the vendor's billing API."},"billed_by":{"type":"string","enum":["vendor"]}},"required":["vendor","credential_id","lease_id","resource_id","period_start","period_end","estimated_micros","source","billed_by"]},"SupplyEnrollment":{"type":"object","properties":{"id":{"type":"string","minLength":1},"claim_tokens":{"type":"array","items":{"$ref":"#/components/schemas/SupplyClaimToken"},"description":"Shown once, one per node. Pass on stdin, never in a process's arguments."},"expires_at":{"$ref":"#/components/schemas/Timestamp"},"install":{"type":"object","properties":{"host":{"type":"string","description":"The install line for a Linux host that runs the node kit."},"driver":{"type":"string","description":"The install line for a driver file (Node 24)."}},"required":["host","driver"]},"guide_url":{"type":"string"}},"required":["id","claim_tokens","expires_at","install","guide_url"]},"SupplyClaimToken":{"type":"string","pattern":"^rent_ec_[A-Za-z0-9_-]{43}$","description":"Claim token, shown once. Pass it on stdin, never in a process's arguments.","example":"rent_ec_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"SupplyEnrollmentRequest":{"type":"object","properties":{"wire":{"$ref":"#/components/schemas/SupplyWire"},"region":{"type":"string","example":"eu-central"},"ask":{"$ref":"#/components/schemas/SupplyAsk"},"capacity":{"$ref":"#/components/schemas/SupplyCapacity"},"payout":{"$ref":"#/components/schemas/SupplyPayout"},"count":{"type":"integer","minimum":1,"maximum":1000,"description":"Claim tokens to make, one per node; default 1."}},"required":["wire","region","ask","capacity"]},"SupplyWire":{"type":"string","enum":["e2b","rent"]},"SupplyAsk":{"type":"object","properties":{"cpu_usd_per_vcpu_hour":{"$ref":"#/components/schemas/UsdDecimal"},"memory_usd_per_gib_hour":{"$ref":"#/components/schemas/UsdDecimal"}},"required":["cpu_usd_per_vcpu_hour","memory_usd_per_gib_hour"],"description":"What the provider asks per hour, in USD."},"SupplyCapacity":{"type":"object","properties":{"slots":{"type":"integer","minimum":1,"description":"Concurrent sandboxes offered."}},"required":["slots"]},"SupplyPayout":{"type":"object","additionalProperties":{"type":"string"},"description":"Payout details, stored as given; nothing pays out yet."},"SupplyClaim":{"type":"object","properties":{"node_id":{"$ref":"#/components/schemas/SupplyNodeId"},"endpoint_id":{"type":"string","minLength":1},"state":{"$ref":"#/components/schemas/SupplyNodeState"},"link":{"type":"object","properties":{"tunnel_token":{"$ref":"#/components/schemas/SupplyTunnelToken"},"api_host":{"type":"string","minLength":1},"proxy_host":{"type":"string","minLength":1}},"required":["tunnel_token","api_host","proxy_host"]},"platform_keys":{"type":"array","items":{"$ref":"#/components/schemas/SupplyPlatformKey"}},"next":{"$ref":"#/components/schemas/SupplyNext"}},"required":["node_id","endpoint_id","state","link","platform_keys","next"]},"SupplyNodeId":{"type":"string","pattern":"^n[0-9a-hjkmnp-tv-z]{15}$","example":"n0k3m8q2v7c4x9p1"},"SupplyNodeState":{"type":"string","enum":["linking","probing","probation","active","suspended","revoked"]},"SupplyTunnelToken":{"type":"string","minLength":1,"description":"Token the node's tunnel connector runs with, shown once."},"SupplyPlatformKey":{"type":"object","properties":{"kid":{"type":"string","minLength":1},"alg":{"type":"string","enum":["EdDSA"]},"public_key":{"$ref":"#/components/schemas/Ed25519PublicKey"},"not_after":{"oneOf":[{"$ref":"#/components/schemas/Timestamp"},{"type":"null"}]}},"required":["kid","alg","public_key","not_after"]},"SupplyNext":{"type":"object","properties":{"action":{"$ref":"#/components/schemas/SupplyNextAction"},"command":{"type":["string","null"],"description":"The one CLI line to run next; null when the action is `none`."},"after_s":{"type":"integer","minimum":0,"description":"Seconds to wait before running it."}},"required":["action","command","after_s"]},"SupplyNextAction":{"type":"string","enum":["start_link","wait","fix_checks","upgrade","re_enroll","none"]},"SupplyClaimRequest":{"type":"object","properties":{"claim_token":{"type":"string","pattern":"^rent_ec_[A-Za-z0-9_-]{43}$"},"public_key":{"$ref":"#/components/schemas/Ed25519PublicKey"},"signature":{"$ref":"#/components/schemas/Ed25519Signature","description":"The node key over `rent.dev claim v1\\n{claim_token}\\n{public_key}`."},"agent_version":{"type":"string","pattern":"^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$","example":"0.1.0"},"wire":{"$ref":"#/components/schemas/SupplyWire"},"facts":{"$ref":"#/components/schemas/SupplyFacts"},"checks":{"type":"array","items":{"$ref":"#/components/schemas/SupplyCheckResult"}}},"required":["claim_token","public_key","signature","agent_version","wire","facts","checks"]},"SupplyFacts":{"type":"object","properties":{"fingerprint":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"`hostFingerprint` of the host."},"cpu_count":{"type":"integer","minimum":1},"memory_mb":{"type":"integer","minimum":1},"os":{"type":"string"},"kernel":{"type":"string"},"virt":{"type":"string","description":"`systemd-detect-virt` output."},"docker_version":{"type":"string"}},"required":["fingerprint"]},"SupplyCheckResult":{"type":"object","properties":{"code":{"type":"string","enum":["os_linux","kvm_available","cgroup_v2","docker_version","docker_compose","outbound_443","outbound_7844","disk_free_gib","memory_gib","embed_ports_closed","clock_skew","bare_metal","no_unattended_upgrades","other_schedulers","link_up","gate_answers","key_proof","template_base","create","exec","shape_vcpu","shape_memory","cpu_bench","file_roundtrip","cold_start_ms","kill","kill_idempotent","no_orphans","data_plane","paid_path"]},"status":{"type":"string","enum":["pass","fail","warn","skip"]},"source":{"type":"string","enum":["node","platform"]},"detail":{"type":"string"},"fix":{"type":"string"},"doc_url":{"type":"string"}},"required":["code","status","source","detail","fix","doc_url"],"description":"One check's outcome. Only a blocking `fail` stops progress."},"SupplyNodePage":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SupplyNode"}},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"SupplyNode":{"type":"object","properties":{"id":{"$ref":"#/components/schemas/SupplyNodeId"},"endpoint_id":{"type":"string","minLength":1},"state":{"$ref":"#/components/schemas/SupplyNodeState"},"wire":{"$ref":"#/components/schemas/SupplyWire"},"region":{"type":"string"},"ask":{"$ref":"#/components/schemas/SupplyAsk"},"capacity":{"$ref":"#/components/schemas/SupplyCapacity"},"templates":{"type":"array","items":{"type":"string","minLength":1},"description":"Template aliases the node serves."},"checks":{"type":"array","items":{"$ref":"#/components/schemas/SupplyCheckResult"}},"reasons":{"type":"array","items":{"type":"string","enum":["os_linux","kvm_available","cgroup_v2","docker_version","docker_compose","outbound_443","outbound_7844","disk_free_gib","memory_gib","embed_ports_closed","clock_skew","link_up","gate_answers","key_proof","template_base","create","exec","shape_vcpu","shape_memory","cpu_bench","file_roundtrip","kill","kill_idempotent","no_orphans","data_plane","paid_path","stale_heartbeat","liveness_mismatch","provider_request"]}},"reachable":{"type":"boolean","description":"Whether the platform reaches the node: its signed ping through the node's tunnel is answered. False until the first answer."},"next":{"$ref":"#/components/schemas/SupplyNext"},"phase_ms":{"$ref":"#/components/schemas/SupplyPhaseMs"},"placement":{"type":"object","properties":{"price_vs_list":{"type":["number","null"],"minimum":0},"explorable":{"type":"boolean"},"reason":{"type":["string","null"]}},"required":["price_vs_list","explorable","reason"]},"time_to_first_payable_ms":{"type":["integer","null"],"minimum":0},"time_to_first_customer_lease_ms":{"type":["integer","null"],"minimum":0},"kit":{"$ref":"#/components/schemas/SupplyNodeKit"}},"required":["id","endpoint_id","state","wire","region","ask","capacity","templates","checks","reasons","reachable","next","phase_ms","placement","time_to_first_payable_ms","time_to_first_customer_lease_ms"]},"SupplyPhaseMs":{"type":"object","properties":{"preflight":{"type":"integer","minimum":0},"embed":{"type":"integer","minimum":0},"templates":{"type":"integer","minimum":0},"claim":{"type":"integer","minimum":0},"link":{"type":"integer","minimum":0},"probe":{"type":"integer","minimum":0},"audit":{"type":"integer","minimum":0}},"description":"Milliseconds spent in each setup phase."},"SupplyNodeKit":{"type":"object","properties":{"image":{"type":["string","null"],"minLength":1,"description":"The node kit image by digest (`…@sha256:…`) that `rentdev-node upgrade` pulls; null when not set."},"min_version":{"type":["string","null"],"pattern":"^(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$","example":"0.1.0","description":"The oldest node agent version accepted; null when any is."}},"required":["image","min_version"]},"SupplyNodePatch":{"type":"object","properties":{"ask":{"$ref":"#/components/schemas/SupplyAsk"},"capacity":{"$ref":"#/components/schemas/SupplyCapacity"},"region":{"type":"string","example":"eu-central"},"payout":{"$ref":"#/components/schemas/SupplyPayout"},"signed_nonce":{"$ref":"#/components/schemas/SignedNonce"}}},"SupplyEarnings":{"type":"object","properties":{"pending_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"releasable_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"frozen_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"paid_out_micros":{"type":"integer","minimum":0,"description":"Integer micro-USD, zero or more.","example":0},"entries":{"type":"array","items":{"$ref":"#/components/schemas/SupplyEarningsEntry"},"description":"Newest first."},"next_cursor":{"type":["string","null"]}},"required":["pending_micros","releasable_micros","frozen_micros","paid_out_micros","entries","next_cursor"],"description":"Accrued earnings of settled leases; nothing shows while a lease runs."},"SupplyEarningsEntry":{"type":"object","properties":{"key":{"type":"string","minLength":1},"lease_id":{"$ref":"#/components/schemas/LeaseId"},"node_id":{"$ref":"#/components/schemas/SupplyNodeId"},"micros":{"type":"integer","minimum":0,"description":"The provider's share.","example":0},"customer_micros":{"type":"integer","minimum":0,"description":"What the customer paid.","example":0},"created_at":{"$ref":"#/components/schemas/Timestamp"},"releasable_at":{"$ref":"#/components/schemas/Timestamp"},"frozen":{"type":"boolean"}},"required":["key","lease_id","node_id","micros","customer_micros","created_at","releasable_at","frozen"]},"SupplyPlatformKeys":{"type":"object","properties":{"keys":{"type":"array","items":{"$ref":"#/components/schemas/SupplyPlatformKey"}}},"required":["keys"],"description":"Keys a node's gate verifies platform requests with."}},"parameters":{}},"paths":{"/v1/accounts/nonce":{"get":{"operationId":"getSignupNonce","tags":["Accounts"],"summary":"Get a single-use nonce for signing up, binding or recovering with an agent key","security":[],"responses":{"200":{"description":"A nonce valid for 5 minutes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupNonce"}}}}}}},"/v1/accounts":{"post":{"operationId":"createAccount","tags":["Accounts"],"summary":"Create an account and its first API key","description":"No email and no proof: an empty body creates an account. Send a signed nonce to bind an Ed25519 agent key for recovery at the same time. A keyless signup sent with `Idempotency-Key` can be retried safely.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Keyless signup only. A repeat within 24 hours answers the same account with a new API key that replaces the first (revoked at once), while the account is untouched: its key never used, nothing bound, no balance, no top-up pending. After that a repeat answers 422 `idempotency_key_reused` and no key. Only a hash of the value is stored; treat it like a secret for those 24 hours."},"required":false,"description":"Keyless signup only. A repeat within 24 hours answers the same account with a new API key that replaces the first (revoked at once), while the account is untouched: its key never used, nothing bound, no balance, no top-up pending. After that a repeat answers 422 `idempotency_key_reused` and no key. Only a hash of the value is stored; treat it like a secret for those 24 hours.","in":"header","name":"idempotency-key"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAccountRequest"}}}},"responses":{"201":{"description":"The account and its API key, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWithKey"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: the signature or nonce did not verify.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the agent key is already bound to an account; or `idempotency_in_flight`: the first signup with this Idempotency-Key is still running after a 5-second wait (a repeat that arrives while it runs waits for it and answers its account).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the Idempotency-Key was used with a different request, or its account has been used since.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/agent-key":{"post":{"operationId":"bindAgentKey","tags":["Accounts"],"summary":"Bind an Ed25519 agent key to this account","description":"The key can then recover the account with a new API key without a spend limit, so an API key with a spend limit cannot bind one (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedNonce"}}}},"responses":{"201":{"description":"The bound key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKey"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the key is already bound to an account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/recover":{"post":{"operationId":"recoverAccount","tags":["Accounts"],"summary":"Get a new API key with a signed nonce from the bound agent key","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignedNonce"}}}},"responses":{"200":{"description":"The account and a new API key, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWithKey"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: the signature or nonce did not verify.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`: no account has this key bound.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/wallet-login":{"post":{"operationId":"walletLogin","tags":["Accounts"],"summary":"Get a new API key with a Sign-In with Ethereum message from the bound wallet","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletLoginRequest"}}}},"responses":{"200":{"description":"The account and a new API key, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountWithKey"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: the message or signature did not verify.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`: no account is bound to this wallet.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/agent-keys":{"get":{"operationId":"listAgentKeys","tags":["Accounts"],"summary":"List the agent keys bound to this account","description":"Each one recovers the account (`POST /v1/accounts/recover`) and signs agent grants.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"The bound keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKeyList"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/agent-keys/{public_key}":{"delete":{"operationId":"removeAgentKey","tags":["Accounts"],"summary":"Unbind an agent key","description":"From now on the key recovers nothing and its signed assertions mint no token for this account. Never refused for being the last binding: the account keeps its API keys.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/Ed25519PublicKey"},"required":true,"description":"Ed25519 public key: 32 bytes, base64url without padding.","name":"public_key","in":"path"}],"responses":{"200":{"description":"The key unbound.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentKey"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/wallets":{"get":{"operationId":"listWalletBindings","tags":["Accounts"],"summary":"List the wallets bound to this account","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"The bound wallets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletBindingList"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/wallets/{chain}/{address}":{"delete":{"operationId":"removeWalletBinding","tags":["Accounts"],"summary":"Unbind a wallet","description":"From now on the wallet no longer logs in to this account (`POST /v1/accounts/wallet-login`). A later payment from it without an API key starts a new account.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","pattern":"^eip155:[0-9]+$","example":"eip155:8453"},"required":true,"name":"chain","in":"path"},{"schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"required":true,"name":"address","in":"path"}],"responses":{"200":{"description":"The wallet unbound.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WalletBinding"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/people":{"get":{"operationId":"listAccountPeople","tags":["Accounts"],"summary":"List the people linked to this account","description":"People who sign in with a passkey and act for this account through OAuth (the console, the CLI, agents they authorize).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"The linked people.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountPersonList"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/accounts/people/{user_id}":{"delete":{"operationId":"removeAccountPerson","tags":["Accounts"],"summary":"Remove a person from this account","description":"At once: the person no longer sees or can choose the account, and every OAuth grant and token they hold for it stops working. What they hold for their other accounts is untouched.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/UserId"},"required":true,"description":"usr_ followed by a 26-character ULID.","name":"user_id","in":"path"}],"responses":{"200":{"description":"The person removed.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountPerson"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/keys":{"get":{"operationId":"listApiKeys","tags":["Keys"],"summary":"List API keys","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"Keys, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyPage"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createApiKey","tags":["Keys"],"summary":"Create an API key","description":"An API key with a spend limit is a delegated budget: it cannot create keys (403). Use an uncapped key or a signed-in person.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header."},"required":false,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header.","in":"header","name":"idempotency-key"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyRequest"}}}},"responses":{"201":{"description":"The key with its secret, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`idempotency_in_flight` or `conflict`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the key was used with a different payload.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/keys/{id}":{"patch":{"operationId":"updateApiKey","tags":["Keys"],"summary":"Rename a key or change its spend limit","description":"Not open to an API key with a spend limit, for any key including itself (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/ApiKeyId"},"required":true,"description":"key_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateApiKeyRequest"}}}},"responses":{"200":{"description":"The updated key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"revokeApiKey","tags":["Keys"],"summary":"Revoke a key","description":"An API key with a spend limit may revoke only itself (403 for another key).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/ApiKeyId"},"required":true,"description":"key_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The revoked key.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/keys/{id}:rotate":{"post":{"operationId":"rotateApiKey","tags":["Keys"],"summary":"Replace a key with a new secret, revoking the old one","description":"An API key with a spend limit may rotate only itself; its successor's limit is what it has left of its limit (never below zero). Rotating another key needs an uncapped key or a signed-in person (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/ApiKeyId"},"required":true,"description":"key_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header."},"required":false,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header.","in":"header","name":"idempotency-key"}],"responses":{"201":{"description":"The new key with its secret, shown once.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreated"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`idempotency_in_flight` or `conflict`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the key was used with a different payload.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/operations/{id}":{"get":{"operationId":"getOperation","tags":["Operations"],"summary":"Poll a long-running operation","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/OperationId"},"required":true,"description":"op_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The operation. While not done, Retry-After says when to poll again.","headers":{"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/quotes":{"get":{"operationId":"listQuotes","tags":["Quotes"],"summary":"Price per completed task for own sandboxes and published-rate vendors, and GPU rows","security":[],"parameters":[{"schema":{"$ref":"#/components/schemas/WorkloadProfile","description":"One profile; default all three."},"required":false,"description":"One profile; default all three.","name":"profile","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":64,"description":"Default 2."},"required":false,"description":"Default 2.","name":"cpu_count","in":"query"},{"schema":{"type":"integer","minimum":128,"description":"Default 4096."},"required":false,"description":"Default 4096.","name":"memory_mb","in":"query"}],"responses":{"200":{"description":"Quotes; cached 60 seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteList"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/status":{"get":{"operationId":"getStatus","tags":["Status"],"summary":"Service and endpoint health","security":[],"responses":{"200":{"description":"Current status.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceStatus"}}}}}}},"/v1/providers":{"get":{"operationId":"listProviders","tags":["Providers"],"summary":"List compute providers and their published prices","description":"The committed provider catalog: who sells compute, what they sell, and what their terms permit. Offerings carry the GPU axis (`gpu`, `usd_per_gpu_hour`) and the CPU axis (`cpu`, `usd_per_vcpu_hour`) side by side. A provider whose terms deny `display` is omitted; one whose terms deny `compare` is listed with its clause and no prices. A third-party figure keeps its `provenance`, and `attribution` names the obligations the response carries.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","description":"One provider id."},"required":false,"description":"One provider id.","name":"provider","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":120,"description":"Canonical GPU model id (`h100-sxm-80gb`) or the vendor's own label."},"required":false,"description":"Canonical GPU model id (`h100-sxm-80gb`) or the vendor's own label.","name":"gpu","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":120,"description":"The CPU capacity class (`shared`, `dedicated`) or the vendor's product label for a CPU offering (e.g. `macos`), matched without regard to case."},"required":false,"description":"The CPU capacity class (`shared`, `dedicated`) or the vendor's product label for a CPU offering (e.g. `macos`), matched without regard to case.","name":"cpu","in":"query"},{"schema":{"type":"string","enum":["x86_64","arm64"],"description":"Keep CPU offerings whose architecture the vendor states as this value."},"required":false,"description":"Keep CPU offerings whose architecture the vendor states as this value.","name":"architecture","in":"query"},{"schema":{"type":"number","minimum":0,"description":"Keep CPU offerings whose `usd_per_vcpu_hour` is at most this many USD."},"required":false,"description":"Keep CPU offerings whose `usd_per_vcpu_hour` is at most this many USD.","name":"max_usd_per_vcpu_hour","in":"query"},{"schema":{"type":"string","enum":["on_demand","spot","reserved","serverless"]},"required":false,"name":"pricing_type","in":"query"},{"schema":{"type":"string","enum":["gpu","node","instance","gpu_line_item"],"description":"Keep offerings whose figure covers this unit (`gpu`, `node`, `instance`, `gpu_line_item`)."},"required":false,"description":"Keep offerings whose figure covers this unit (`gpu`, `node`, `instance`, `gpu_line_item`).","name":"covers","in":"query"},{"schema":{"type":"string","enum":["listed","effective_dated","weighted_average","median","floor","advertised_from"],"description":"Keep offerings whose figure was produced this way (`listed`, `floor`, …)."},"required":false,"description":"Keep offerings whose figure was produced this way (`listed`, `floor`, …).","name":"figure","in":"query"},{"schema":{"type":"integer","minimum":1,"description":"Keep GPU offerings whose `gpu.count` (GPUs per priced unit) is exactly this many. `gpu_count=1` asks for single-GPU offers only."},"required":false,"description":"Keep GPU offerings whose `gpu.count` (GPUs per priced unit) is exactly this many. `gpu_count=1` asks for single-GPU offers only.","name":"gpu_count","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":200,"description":"Keep offerings in exactly this comparison group; the id an offering carries groups it with the other offers of the same purchasable unit."},"required":false,"description":"Keep offerings in exactly this comparison group; the id an offering carries groups it with the other offers of the same purchasable unit.","name":"comparison_group","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":120,"description":"A region label or a canonical region id (`us-east-1`), matched without regard to case; either spelling of a registered place finds every offering in it."},"required":false,"description":"A region label or a canonical region id (`us-east-1`), matched without regard to case; either spelling of a registered place finds every offering in it.","name":"region","in":"query"},{"schema":{"type":"string","enum":["price","price_desc"],"description":"Offerings order: `price` sorts by the comparable hourly figure (per GPU, per vCPU, else per unit) ascending, `price_desc` descending; offerings without a figure sort last. Default keeps catalog order (provider, product, sku)."},"required":false,"description":"Offerings order: `price` sorts by the comparable hourly figure (per GPU, per vCPU, else per unit) ascending, `price_desc` descending; offerings without a figure sort last. Default keeps catalog order (provider, product, sku).","name":"sort","in":"query"},{"schema":{"type":"number","minimum":0,"description":"Keep offerings whose hourly figure (`usd_per_gpu_hour` on a GPU row, else `usd_per_hour`) is at most this many USD."},"required":false,"description":"Keep offerings whose hourly figure (`usd_per_gpu_hour` on a GPU row, else `usd_per_hour`) is at most this many USD.","name":"max_usd_per_hour","in":"query"},{"schema":{"type":"string","enum":["first_party","third_party"]},"required":false,"name":"provenance","in":"query"},{"schema":{"type":"string","enum":["fetch_automated","store","display","compare","redistribute","derive"],"description":"The use the response asserts: only providers permitting it are listed, and only offerings whose `publish_mask` allows it are carried. Default `display`."},"required":false,"description":"The use the response asserts: only providers permitting it are listed, and only offerings whose `publish_mask` allows it are carried. Default `display`.","name":"use","in":"query"},{"schema":{"type":"string","enum":["true","false"],"description":"`true` keeps providers with an agentic product; `false` keeps the rest."},"required":false,"description":"`true` keeps providers with an agentic product; `false` keeps the rest.","name":"agentic","in":"query"},{"schema":{"type":"string","enum":["providers","offerings","all"],"description":"Which arrays to carry: `providers` (default), `offerings`, or `all`."},"required":false,"description":"Which arrays to carry: `providers` (default), `offerings`, or `all`.","name":"include","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Most members per requested array, 1-200; default 200."},"required":false,"description":"Most members per requested array, 1-200; default 200.","name":"limit","in":"query"}],"responses":{"200":{"description":"Providers and the offerings matching the filters; cached 60 seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderList"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/providers/{id}":{"get":{"operationId":"getProvider","tags":["Providers"],"summary":"Get a provider, its terms and its published prices","description":"One provider with its full terms matrix and the offerings its terms permit publishing. A compare-denied provider answers with its clause and no offerings; a provider whose terms deny `display` answers 404.","security":[],"parameters":[{"schema":{"type":"string","minLength":1,"pattern":"^[a-z0-9][a-z0-9-]*$","description":"Provider id (lowercase slug), e.g. `runpod`."},"required":true,"description":"Provider id (lowercase slug), e.g. `runpod`.","name":"id","in":"path"}],"responses":{"200":{"description":"The provider and its offerings; cached 60 seconds.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProviderDetail"}}}},"404":{"description":"`not_found`: no provider with this id is published.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/balance":{"get":{"operationId":"getBalance","tags":["Billing"],"summary":"Prepaid balance","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Total, held and available micro-USD.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balance"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/ledger":{"get":{"operationId":"listLedgerEntries","tags":["Billing"],"summary":"Ledger entries, newest first","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"One page of entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LedgerEntryPage"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/credits/checkout":{"post":{"operationId":"createCheckout","tags":["Billing"],"summary":"Create a Stripe Checkout Session to buy credits","description":"Card, Link, US bank account or stablecoin. The fee, max(5.5%, $0.80), is a separate line. Credits land when the payment succeeds.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header."},"required":false,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header.","in":"header","name":"idempotency-key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}}},"responses":{"201":{"description":"Open checkout_url in a browser.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutSession"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`idempotency_in_flight` or `conflict`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the key was used with a different payload.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/credits/payment-method":{"post":{"operationId":"createPaymentMethodSetup","tags":["Billing"],"summary":"Create a Checkout Session that saves a card or Link method for auto-recharge","description":"Not open to an API key with a spend limit (403): auto-recharge charges the saved method off-session. Use an uncapped key or a signed-in person.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"201":{"description":"Open checkout_url in a browser.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetupSession"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/payment-methods":{"get":{"operationId":"listPaymentMethods","tags":["Billing"],"summary":"Saved card and Link methods","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Saved methods.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentMethodList"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/billing/auto-recharge":{"get":{"operationId":"getAutoRecharge","tags":["Billing"],"summary":"Auto-recharge settings","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Current settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRecharge"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"put":{"operationId":"setAutoRecharge","tags":["Billing"],"summary":"Turn auto-recharge on or off","description":"When available balance falls below the threshold, the saved method is charged off-session for the amount plus the fee. A decline or an SCA request turns it off. Not open to an API key with a spend limit (403): turning it on can charge the saved method at once. Use an uncapped key or a signed-in person.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRechargeRequest"}}}},"responses":{"200":{"description":"The stored settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoRecharge"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`: no saved method with that id.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/credits/x402":{"post":{"operationId":"topupX402","tags":["Billing"],"summary":"Top up with USDC over x402","description":"Without a `PAYMENT-SIGNATURE` header this answers 402 with `PAYMENT-REQUIRED`: x402 v2 `exact` on Base, amount = credits + 5.5% rounded up to a base unit. Retry with the signed payment. Credits land after settlement and an on-chain receipt. Without an API key, the paying wallet's account is credited, created if new, and its key returned once.","security":[{},{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","pattern":"^(?:0|[1-9]\\d*)(?:\\.\\d{1,6})?$","description":"Credits in USD, at least 0.000001. The 5.5% fee is added to the payment.","example":"5.00"},"required":true,"description":"Credits in USD, at least 0.000001. The 5.5% fee is added to the payment.","name":"amount_usd","in":"query"},{"schema":{"type":"string","description":"x402 v2 payment payload."},"required":false,"description":"x402 v2 payment payload.","name":"payment-signature","in":"header"}],"responses":{"200":{"description":"Settled and credited (also a repeat of a settled payment).","headers":{"PAYMENT-RESPONSE":{"description":"x402 settle response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402TopupResult"}}}},"201":{"description":"Settled; the wallet's new account was created and its API key is returned once.","headers":{"PAYMENT-RESPONSE":{"description":"x402 settle response.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/X402TopupResult"}}}},"202":{"description":"Accepted: broadcast, not yet confirmed on-chain; poll the Operation at Location. When the payment was sent without an API key and created the paying wallet's account, the body also carries `account_id` (that account) and `api_key` (an `ApiKeyCreated` with its secret, shown once and never again) beside the Operation's members.","headers":{"Location":{"description":"`/v1/operations/{id}`.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"Payment required, or the facilitator refused the payment.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 payment requirements.","schema":{"type":"string"}}},"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/pay/{token}":{"get":{"operationId":"openPayLink","tags":["Billing"],"summary":"Open a pay link: redirects to a fresh Checkout Session","description":"The link a 402 Problem carries as `topup.checkout_url`. Valid 24 hours; no key needed.","security":[],"parameters":[{"schema":{"type":"string","minLength":1},"required":true,"name":"token","in":"path"}],"responses":{"303":{"description":"Redirect to Stripe Checkout.","headers":{"Location":{"description":"Checkout Session URL.","schema":{"type":"string"}}}},"404":{"description":"`not_found`: the token is malformed or its signature does not verify.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"`gone`: the link has expired.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes":{"post":{"operationId":"createSandbox","tags":["Sandboxes"],"summary":"Create a sandbox","description":"Takes a hold of the ceiling rate times the timeout, places the sandbox and answers 202 with an Operation. With `Prefer: wait=<s>`, answers 201 with the sandbox when it is ready within the wait.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header."},"required":false,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header.","in":"header","name":"idempotency-key"},{"schema":{"type":"string","pattern":"^wait=\\d{1,3}$","description":"RFC 7240 `wait=<seconds>`: answer 201 with the sandbox if it is ready within the wait, else 202."},"required":false,"description":"RFC 7240 `wait=<seconds>`: answer 201 with the sandbox if it is ready within the wait, else 202.","in":"header","name":"prefer"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSandboxRequest"}}}},"responses":{"201":{"description":"Ready within the Prefer wait.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"202":{"description":"Accepted: poll the Operation at Location.","headers":{"Location":{"description":"`/v1/operations/{id}`.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"`insufficient_balance`, `account_frozen` or `key_limit_reached`, with `balance_required_micros` and `topup` links.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`: unknown template.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`idempotency_in_flight` or `conflict`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the key was used with a different payload.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"`rate_limited`: the vendor's 429, with its Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`no_capacity`: no endpoint can place the request now.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"operationId":"listSandboxes","tags":["Sandboxes"],"summary":"List sandboxes","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/LeaseState","description":"Only leases in this state. Default: every state but terminated and failed."},"required":false,"description":"Only leases in this state. Default: every state but terminated and failed.","name":"state","in":"query"}],"responses":{"200":{"description":"One page, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxPage"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}":{"get":{"operationId":"getSandbox","tags":["Sandboxes"],"summary":"Get a sandbox","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The sandbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"terminateSandbox","tags":["Sandboxes"],"summary":"Terminate a sandbox","description":"Stops it and settles: the last usage window is captured and the rest of the hold released.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The sandbox, settling or terminated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}:extend":{"post":{"operationId":"extendSandbox","tags":["Sandboxes"],"summary":"Set a new timeout","description":"The added time is held on the key that started the sandbox, so an API key with a spend limit cannot extend a sandbox another key started (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExtendSandboxRequest"}}}},"responses":{"200":{"description":"The sandbox with its new timeout_at.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"`insufficient_balance`, `account_frozen` or `key_limit_reached`, with `balance_required_micros` and `topup` links.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit and another key started the sandbox (its holds are charged to that key; use the key that started it, an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the sandbox is not running.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}:pause":{"post":{"operationId":"pauseSandbox","tags":["Sandboxes"],"summary":"Pause a sandbox, keeping memory and disk","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The sandbox, settling then paused.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"400":{"description":"`unsupported_parameter`: the endpoint cannot pause.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the sandbox is not running.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}:resume":{"post":{"operationId":"resumeSandbox","tags":["Sandboxes"],"summary":"Resume a paused sandbox","description":"The resumed time is held on the key that started the sandbox, so an API key with a spend limit cannot resume a sandbox another key started (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeSandboxRequest"}}}},"responses":{"200":{"description":"The running sandbox.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Sandbox"}}}},"202":{"description":"Accepted: poll the Operation at Location.","headers":{"Location":{"description":"`/v1/operations/{id}`.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"`insufficient_balance`, `account_frozen` or `key_limit_reached`, with `balance_required_micros` and `topup` links.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit and another key started the sandbox (its holds are charged to that key; use the key that started it, an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the sandbox is not paused.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`no_capacity`: no endpoint can place the request now.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/exec":{"post":{"operationId":"execInSandbox","tags":["Sandboxes"],"summary":"Run a command and wait for it","description":"Synchronous, up to timeout_s (default 50). For longer work start a process.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecRequest"}}}},"responses":{"200":{"description":"Output and exit code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecResult"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the sandbox is not running.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/processes":{"post":{"operationId":"startProcess","tags":["Sandboxes"],"summary":"Start a background process","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartProcessRequest"}}}},"responses":{"201":{"description":"The started process.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SandboxProcess"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the sandbox is not running.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/processes/{process_id}/output":{"get":{"operationId":"getProcessOutput","tags":["Sandboxes"],"summary":"Read a process's output after a cursor","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"process_id","in":"path"},{"schema":{"type":"string","minLength":1,"description":"Cursor from the previous read; omit to read from the start."},"required":false,"description":"Cursor from the previous read; omit to read from the start.","name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":0,"maximum":30000,"description":"Wait up to this long for new output before answering. Default 0."},"required":false,"description":"Wait up to this long for new output before answering. Default 0.","name":"wait_ms","in":"query"}],"responses":{"200":{"description":"New output and the next cursor.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessOutput"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/processes/{process_id}/stdin":{"post":{"operationId":"writeProcessStdin","tags":["Sandboxes"],"summary":"Write to a process's stdin","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"process_id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WriteStdinRequest"}}}},"responses":{"204":{"description":"Written."},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/processes/{process_id}":{"delete":{"operationId":"killProcess","tags":["Sandboxes"],"summary":"Kill a process","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1},"required":true,"name":"process_id","in":"path"}],"responses":{"204":{"description":"Killed."},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/files":{"get":{"operationId":"listFiles","tags":["Sandboxes"],"summary":"List a directory","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"example":"/home/user/main.py"},"required":true,"name":"path","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":10,"description":"List depth. Default 1."},"required":false,"description":"List depth. Default 1.","name":"depth","in":"query"}],"responses":{"200":{"description":"Entries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileList"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/files/content":{"get":{"operationId":"readFile","tags":["Sandboxes"],"summary":"Read a file, streamed","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"example":"/home/user/main.py"},"required":true,"name":"path","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":10,"description":"List depth. Default 1."},"required":false,"description":"List depth. Default 1.","name":"depth","in":"query"}],"responses":{"200":{"description":"File bytes.","content":{"application/octet-stream":{"schema":{"type":"string","contentMediaType":"application/octet-stream"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"put":{"operationId":"writeFile","tags":["Sandboxes"],"summary":"Write a file, streamed","description":"Creates parent directories. The edge refuses request bodies over 100 MB.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","minLength":1,"example":"/home/user/main.py"},"required":true,"name":"path","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":10,"description":"List depth. Default 1."},"required":false,"description":"List depth. Default 1.","name":"depth","in":"query"}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","contentMediaType":"application/octet-stream"}}}},"responses":{"200":{"description":"The written file.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileEntry"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/ports/{port}/url":{"get":{"operationId":"getPortUrl","tags":["Sandboxes"],"summary":"Public URL of a port inside the sandbox","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"integer","minimum":1,"maximum":65535},"required":true,"name":"port","in":"path"}],"responses":{"200":{"description":"The URL.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortUrl"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/run-code":{"post":{"operationId":"runCode","tags":["Sandboxes"],"summary":"Run code on the code-interpreter-v1 kernel","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCodeRequest"}}}},"responses":{"200":{"description":"Results, output and any error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunCodeResult"}}}},"400":{"description":"`unsupported_parameter`: the sandbox is not on code-interpreter-v1.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/sandboxes/{id}/logs":{"get":{"operationId":"streamSandboxLogs","tags":["Sandboxes"],"summary":"Sandbox logs as server-sent events","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","description":"Resume after this event."},"required":false,"description":"Resume after this event.","name":"last-event-id","in":"header"}],"responses":{"200":{"description":"Server-sent events. Each event has an `id` and a JSON `LogEntry` as `data`; reconnect with Last-Event-ID.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/gpu-pods":{"post":{"operationId":"createGpuPod","tags":["GPU pods"],"summary":"Create a GPU pod on your own RunPod key","description":"BYOK only: RunPod bills your key; no rent.dev balance is used.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header."},"required":false,"description":"Replays the first response for 24 hours. Reuse with a different payload answers 422; while the first is in flight, 409. A show-once secret (an API key's `secret`) is never stored: a replay leaves it out and names it in the `Show-Once-Omitted` header.","in":"header","name":"idempotency-key"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGpuPodRequest"}}}},"responses":{"201":{"description":"The pod.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuPod"}}}},"202":{"description":"Accepted: poll the Operation at Location.","headers":{"Location":{"description":"`/v1/operations/{id}`.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before polling.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Operation"}}}},"400":{"description":"`invalid_request`, or `unsupported_parameter` when no RunPod credential is stored.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`idempotency_in_flight` or `conflict`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`idempotency_key_reused`: the key was used with a different payload.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"`rate_limited`: the vendor's 429, with its Retry-After.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`no_capacity`: RunPod has none of the asked GPU now (a stock-out), with `retry_after`; retry later, or ask for another `gpu_type` or `cloud_type`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"operationId":"listGpuPods","tags":["GPU pods"],"summary":"List GPU pods","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"One page, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuPodPage"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/gpu-pods/{id}":{"get":{"operationId":"getGpuPod","tags":["GPU pods"],"summary":"Get a GPU pod","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The pod.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuPod"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"terminateGpuPod","tags":["GPU pods"],"summary":"Terminate a GPU pod","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"The terminated pod.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuPod"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/gpu-pods/{id}/logs":{"get":{"operationId":"streamGpuPodLogs","tags":["GPU pods"],"summary":"Pod logs as server-sent events","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"},{"schema":{"type":"string","description":"Resume after this event."},"required":false,"description":"Resume after this event.","name":"last-event-id","in":"header"}],"responses":{"200":{"description":"Server-sent events. Each event has an `id` and a JSON `LogEntry` as `data`; reconnect with Last-Event-ID.","content":{"text/event-stream":{"schema":{"type":"string"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/gpu-pods/{id}/exec":{"post":{"operationId":"execInGpuPod","tags":["GPU pods"],"summary":"Run a command in a pod","description":"RunPod's limits pass through: timeoutSeconds 1-25, output up to 1 MiB.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/LeaseId"},"required":true,"description":"lse_ followed by a 26-character ULID.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuExecRequest"}}}},"responses":{"200":{"description":"Output and exit code.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GpuExecResult"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/byok/credentials":{"post":{"operationId":"createByokCredential","tags":["BYOK"],"summary":"Store a vendor credential","description":"Checked with one read-only vendor call, then stored encrypted. Never returned. Not open to an API key with a spend limit (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateByokCredentialRequest"}}}},"responses":{"201":{"description":"The stored credential, without its secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokCredential"}}}},"400":{"description":"`invalid_request`: malformed, or the vendor refused the credential.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"502":{"description":"`vendor_error`: the upstream vendor failed.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"operationId":"listByokCredentials","tags":["BYOK"],"summary":"List stored vendor credentials","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"responses":{"200":{"description":"Ids and vendors only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokCredentialList"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/byok/credentials/{id}":{"delete":{"operationId":"deleteByokCredential","tags":["BYOK"],"summary":"Delete a vendor credential","description":"Never refused for what it would leave running: the answer lists every sandbox and GPU pod created with the credential that is still running (`orphaned`). Those keep running on your own vendor bill, and rent.dev can no longer stop them, run commands in them or read their logs: terminate each one at the vendor (`vendor_resource_id` is the vendor's id for it). Not open to an API key with a spend limit (403).","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/CredentialId"},"required":true,"description":"cred_ followed by a 26-character ULID.","name":"id","in":"path"}],"responses":{"200":{"description":"Deleted, with what is still running on the credential.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ByokCredentialDeleted"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope, or the caller is an API key with a spend limit (use an uncapped key or a signed-in person).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/usage":{"get":{"operationId":"getUsage","tags":["Usage"],"summary":"Own usage billed by rent.dev beside BYOK showback billed by vendors","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/Timestamp","description":"Default 30 days ago."},"required":false,"description":"Default 30 days ago.","name":"from","in":"query"},{"schema":{"$ref":"#/components/schemas/Timestamp","description":"Default now."},"required":false,"description":"Default now.","name":"to","in":"query"}],"responses":{"200":{"description":"Usage for the period.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UsageReport"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the scope.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/enrollments":{"post":{"operationId":"createSupplyEnrollment","tags":["Supply"],"summary":"Enrol nodes: get one single-use claim token per node and the install lines","description":"Needs a token with the `supply` scope. Each claim token is shown once and expires after 600 seconds; pass it to the node kit on stdin, never in a process's arguments.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyEnrollmentRequest"}}}},"responses":{"201":{"description":"The claim tokens, shown once, and the install lines.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyEnrollment"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable); or this environment has no node image to install (`owner_action_required`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/claims":{"post":{"operationId":"claimSupplyNode","tags":["Supply"],"summary":"Claim a node with its claim token and a new node key","description":"Called by the node kit, with no key: the claim token is the credential, and `signature` proves the node holds the private half of `public_key`. Answers the node's link and the platform keys its gate verifies requests with.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyClaimRequest"}}}},"responses":{"201":{"description":"The node, its link, and the next step: start the link.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyClaim"}}}},"400":{"description":"`invalid_request`: the body is malformed, or its `wire` is not the enrolment's.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`claim_proof_invalid`: the proof of possession did not verify.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`node_exists`: a live node already holds this host fingerprint.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"`claim_invalid`: the token is unknown, used or expired (`next.action` `re_enroll`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"422":{"description":"`checks_failed`: a blocking check failed; the `checks` with their fixes, `next.action` `fix_checks`. The token stays unused until it expires.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: the node's link could not be made; retry after `retry_after`, or wait for rent.dev when `owner_action_required`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/nodes":{"get":{"operationId":"listSupplyNodes","tags":["Supply"],"summary":"List this account's nodes","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"One page, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNodePage"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/nodes/{id}":{"get":{"operationId":"getSupplyNode","tags":["Supply"],"summary":"Get a node: its state, checks, next step and placement","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/SupplyNodeId"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The node.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNode"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateSupplyNode","tags":["Supply"],"summary":"Change a node's ask, capacity, region or payout","description":"A new ask applies to leases placed from now on; running leases keep the rates they were placed at. More slots or a new region sends the node back to `probing`. Changing `payout` needs `signed_nonce`: a nonce from `GET /v1/accounts/nonce` signed over `rent.dev payout v1\\n{node_id}\\n{nonce}\\n{public_key}` by the account's agent key.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/SupplyNodeId"},"required":true,"name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNodePatch"}}}},"responses":{"200":{"description":"The updated node.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNode"}}}},"400":{"description":"`invalid_request` or `unsupported_parameter`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope; or `payout_proof_required`: `signed_nonce` is not a fresh nonce signed over `rent.dev payout v1\\n{node_id}\\n{nonce}\\n{public_key}` by an agent key of this account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the node changed state while the request ran; send it again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"`node_revoked`: the node is revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/nodes/{id}:probe":{"post":{"operationId":"probeSupplyNode","tags":["Supply"],"summary":"Probe a node now","description":"Schedules the node's adapter probe at once; a suspended node goes back to `probing`.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/SupplyNodeId"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The node, its probe due now.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNode"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`probe_in_progress`: a probe of the node is running; or `conflict`: the node changed state while the request ran.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"`node_revoked`: the node is revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/nodes/{id}:revoke":{"post":{"operationId":"revokeSupplyNode","tags":["Supply"],"summary":"Revoke a node and remove its link","description":"No new lease is placed on it. Earnings already accrued stay.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"$ref":"#/components/schemas/SupplyNodeId"},"required":true,"name":"id","in":"path"}],"responses":{"200":{"description":"The revoked node.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyNode"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"`not_found`, also for another account's resource.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"`conflict`: the node changed state while the request ran; send it again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"`supply_link_unavailable`: partner supply is not configured in this environment (`owner_action_required`, not retryable); or the node is revoked but its link could not be removed: send the revoke again.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/earnings":{"get":{"operationId":"getSupplyEarnings","tags":["Supply"],"summary":"Accrued earnings of this account's nodes","description":"A lease accrues when it settles; nothing shows while it runs. An accrual becomes releasable after the holdback, longer when the paying account topped up by card.","security":[{"bearerAuth":[]},{"apiKeyHeader":[]}],"parameters":[{"schema":{"type":"string","minLength":1},"required":false,"name":"cursor","in":"query"},{"schema":{"type":"integer","minimum":1,"maximum":200,"description":"Page size, 1-200; default 50."},"required":false,"description":"Page size, 1-200; default 50.","name":"limit","in":"query"}],"responses":{"200":{"description":"The totals and one page of entries, newest first.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyEarnings"}}}},"401":{"description":"`unauthenticated`: no key, or one that is unknown or revoked.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"`forbidden`: the token lacks the `supply` scope. API keys never carry it; ask the agent grant for `scope=supply`.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/supply/keys":{"get":{"operationId":"listSupplyPlatformKeys","tags":["Supply"],"summary":"The platform keys a node's gate verifies platform requests with","security":[],"responses":{"200":{"description":"Current and retiring keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupplyPlatformKeys"}}}}}}},"/v1/supply/guide":{"get":{"operationId":"getSupplyGuide","tags":["Supply"],"summary":"The provider guide, as Markdown","security":[],"responses":{"200":{"description":"The guide.","content":{"text/markdown":{"schema":{"type":"string"}}}}}}}},"webhooks":{}}