{"openapi":"3.1.0","info":{"title":"SolidRPC agent management","version":"0.3.0","description":"Use sa_ management credentials as Bearer tokens only on this API. Use separate ak_ RPC keys on the RPC host. GET /me shows your scopes. Paid operational access only. Email verification and a password are not required for agent provisioning, funding, or RPC key creation. New accounts start provisional with a funding-only credential. After funding is SETTLED, rotate that credential to activate paid operational access, save the replacement, then revoke the old credential. Free accounts cannot grant operational access. Owner email claims are optional and enable dashboard login. Follow externalDocs for the complete onboarding sequence and info.termsOfService for the exact accepted terms. Budgets use integer USD cents. Request accounting uses USD nanounits. Agents cannot change owner identity or purchase card plans.","termsOfService":"https://api.solidrpc.io/agent/v1/terms/agent-prepaid-2026-10-28-v5"},"servers":[{"url":"https://api.solidrpc.io/agent/v1"}],"security":[{"agentToken":[]}],"components":{"securitySchemes":{"agentToken":{"type":"http","scheme":"bearer","description":"Opaque sa_ management credential for this API only. An ak_ RPC API key cannot authenticate here. Never send an sa_ token to an RPC endpoint."}},"schemas":{"Error":{"type":"object","properties":{"error":{},"code":{"type":"string"},"retryable":{"type":"boolean"},"details":{}}},"ProvisionedAccount":{"type":"object","properties":{"accountId":{"type":"string"},"status":{"const":"PROVISIONAL"},"token":{"type":"string","description":"Secret. Persist privately. Never log."}},"required":["accountId","status","token"]},"ManagementCredential":{"type":"object","properties":{"id":{"type":"string"},"token":{"type":"string"},"name":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"bootstrap":{"type":"boolean"},"previousCredentialId":{"type":"string"}},"required":["id","token","scopes","bootstrap","previousCredentialId"]},"FundingIntent":{"type":"object","properties":{"id":{"type":"string"},"status":{"enum":["QUOTED","SUBMITTED","SETTLED","EXPIRED"]},"amountCents":{"type":"integer"},"creditCents":{"type":"integer"},"taxCents":{"type":"integer"},"currency":{"const":"USD"},"expiresAt":{"type":"string","format":"date-time"},"transactionHash":{"type":["string","null"]},"paymentRequired":{"type":"object","required":["x402Version","resource","accepts"],"properties":{"x402Version":{"const":2},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}}}}},"required":["id","status","amountCents","creditCents","taxCents","currency","expiresAt","paymentRequired"]},"CreatedRpcKey":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"key":{"type":"string"},"keyPrefix":{"type":"string"}},"required":["id","name","key","keyPrefix"]},"ApiKeySettingsInput":{"type":"object","properties":{"jwtRequired":{"type":"boolean","description":"Requires at least one installed JWT verification key before enabling."},"jwtIssuer":{"type":["string","null"],"maxLength":512,"description":"Expected issuer. Null or blank removes the issuer constraint."},"jwtMaxLifetimeSeconds":{"type":"integer","minimum":300,"maximum":86400},"allowedIpCidrs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"maxItems":100,"uniqueItems":true,"description":"IPv4/IPv6 addresses or CIDRs. Normalized to canonical network CIDRs. Equivalent duplicates are rejected. Empty means no source-IP restriction."},"allowedChainIds":{"type":"array","items":{"type":"integer","minimum":1,"maximum":2147483647},"maxItems":100,"uniqueItems":true,"description":"IDs from the live network catalog. Empty means no additional key-level chain restriction. Account restrictions still apply."},"allowedMethods":{"type":"array","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z][A-Za-z0-9_]{0,127}$"},"maxItems":100,"uniqueItems":true,"description":"Exact case-sensitive JSON-RPC names, no wildcards. Values are trimmed. Empty means no additional key-level method restriction."},"rateLimitRpsCap":{"type":["integer","null"],"minimum":1,"description":"RPC method calls per second, at most the current account rate limit. Null removes the key cap. Account limits still apply."}},"required":["jwtRequired","jwtIssuer","jwtMaxLifetimeSeconds","allowedIpCidrs","allowedChainIds","allowedMethods","rateLimitRpsCap"],"additionalProperties":false},"JwtVerifierKeyInput":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":64,"description":"Trimmed, unique per RPC key ignoring case."},"publicKeyPem":{"type":"string","minLength":1,"maxLength":16384,"description":"SPKI PEM PUBLIC KEY only. RSA 2048–4096 bits with exponent 65537 (RS256), or EC P-256 (ES256). The algorithm is inferred. Never submit a private key."}},"required":["name","publicKeyPem"],"additionalProperties":false},"JwtVerifierKey":{"type":"object","properties":{"id":{"type":"string"},"kid":{"type":"string"},"name":{"type":"string"},"algorithm":{"enum":["RS256","ES256"]},"fingerprint":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}},"required":["id","kid","name","algorithm","fingerprint","createdAt"],"additionalProperties":true},"ApiKeySettings":{"type":"object","properties":{"jwtRequired":{"type":"boolean","description":"Requires at least one installed JWT verification key before enabling."},"jwtIssuer":{"type":["string","null"],"maxLength":512,"description":"Expected issuer. Null or blank removes the issuer constraint."},"jwtMaxLifetimeSeconds":{"type":"integer","minimum":300,"maximum":86400},"allowedIpCidrs":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64},"maxItems":100,"uniqueItems":true,"description":"IPv4/IPv6 addresses or CIDRs. Normalized to canonical network CIDRs. Equivalent duplicates are rejected. Empty means no source-IP restriction."},"allowedChainIds":{"type":"array","items":{"type":"integer","minimum":1,"maximum":2147483647},"maxItems":100,"uniqueItems":true,"description":"IDs from the live network catalog. Empty means no additional key-level chain restriction. Account restrictions still apply."},"allowedMethods":{"type":"array","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Za-z][A-Za-z0-9_]{0,127}$"},"maxItems":100,"uniqueItems":true,"description":"Exact case-sensitive JSON-RPC names, no wildcards. Values are trimmed. Empty means no additional key-level method restriction."},"rateLimitRpsCap":{"type":["integer","null"],"minimum":1,"description":"RPC method calls per second, at most the current account rate limit. Null removes the key cap. Account limits still apply."},"id":{"type":"string"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"isActive":{"type":"boolean"},"audience":{"type":"string"},"policyRevision":{"type":"integer"},"accountRateLimitRps":{"type":["integer","null"]},"accountBurstRps":{"type":["integer","null"]},"jwtKeys":{"type":"array","items":{"$ref":"#/components/schemas/JwtVerifierKey"}}},"required":["jwtRequired","jwtIssuer","jwtMaxLifetimeSeconds","allowedIpCidrs","allowedChainIds","allowedMethods","rateLimitRpsCap","id","name","keyPrefix","isActive","audience","policyRevision","accountRateLimitRps","accountBurstRps","jwtKeys"],"additionalProperties":true},"SupportAttachmentInput":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":200},"mime":{"enum":["text/csv","image/jpeg","image/png","application/pdf","text/plain","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"]},"data":{"type":"string","minLength":1,"contentEncoding":"base64","description":"Base64-encoded file, at most 2 MiB decoded. GET /support/config publishes current limits."}},"required":["filename","mime","data"],"additionalProperties":true},"AgentCapabilities":{"type":"object","properties":{"version":{"type":"integer","const":1},"apiBaseUrl":{"type":"string","format":"uri"},"availability":{"type":"object","properties":{"discovery":{"type":"boolean"},"accountCreation":{"type":"boolean"},"accountManagement":{"type":"boolean"},"funding":{"type":"boolean"},"note":{"type":"string"}},"required":["discovery","accountCreation","accountManagement","funding","note"]},"pricing":{"type":"object","properties":{"currency":{"const":"USD","type":"string"},"newAccountPricePerMillionCents":{"type":"integer","minimum":0},"rateLimitRps":{"type":"integer","minimum":0},"burstRps":{"type":"integer","minimum":0},"maxApiKeys":{"type":"integer","minimum":0},"websocket":{"type":"boolean"},"note":{"type":"string"}},"required":["currency","newAccountPricePerMillionCents","rateLimitRps","burstRps","maxApiKeys","websocket","note"]},"credentials":{"type":"object","properties":{"management":{"type":"object","properties":{"prefix":{"type":"string"},"baseUrl":{"type":"string","format":"uri"},"transport":{"type":"string"},"purpose":{"type":"string"}},"required":["prefix","baseUrl","transport","purpose"]},"rpc":{"type":"object","properties":{"prefix":{"type":"string"},"purpose":{"type":"string"}},"required":["prefix","purpose"]}},"required":["management","rpc"]},"paidAccountRequired":{"type":"boolean"},"bootstrap":{"type":"string","const":"funding_only"},"termsRevision":{"type":"string"},"termsSha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"links":{"type":"object","properties":{"capabilities":{"type":"string","format":"uri"},"onboarding":{"type":"string","format":"uri"},"openapi":{"type":"string","format":"uri"},"terms":{"type":"string","format":"uri"},"generalTerms":{"type":"string","format":"uri"},"example":{"type":"string","format":"uri"},"exampleScript":{"type":"string","format":"uri"}},"required":["capabilities","onboarding","openapi","terms","generalTerms","example","exampleScript"]},"onboarding":{"type":"object","properties":{"emailVerificationRequired":{"type":"boolean"},"passwordRequired":{"type":"boolean"},"ownerClaimOptional":{"type":"boolean"},"activation":{"type":"string"}},"required":["emailVerificationRequired","passwordRequired","ownerClaimOptional","activation"]},"billing":{"type":"object","properties":{"automaticTax":{"type":"boolean"},"requiredFields":{"type":"array","items":{"type":"string"}},"additionalFieldsByCountry":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"taxIdSupported":{"type":"boolean"},"profileUpdateMode":{"type":"string","const":"replace"}},"required":["automaticTax","requiredFields","additionalFieldsByCountry","taxIdSupported","profileUpdateMode"]},"payment":{"type":"object","properties":{"mode":{"type":"string","enum":["test","live"]},"network":{"type":"string"},"asset":{"type":"string","const":"USDC"},"assetAddress":{"type":"string"},"minimumCents":{"type":"integer","minimum":0},"taxBehavior":{"type":"string","const":"inclusive"}},"required":["mode","network","asset","assetAddress","minimumCents","taxBehavior"]},"scopes":{"type":"array","items":{"type":"string"}}},"required":["version","apiBaseUrl","availability","pricing","credentials","paidAccountRequired","bootstrap","termsRevision","termsSha256","links","onboarding","billing","payment","scopes"]},"AgentOnboarding":{"allOf":[{"$ref":"#/components/schemas/AgentCapabilities"},{"type":"object","properties":{"title":{"type":"string"},"preflight":{"type":"string"},"authentication":{"type":"string"},"steps":{"type":"array","items":{"type":"object","properties":{"method":{"type":"string","enum":["GET","POST","PATCH","DELETE"]},"path":{"type":"string"},"instruction":{"type":"string"}},"required":["method","path","instruction"]}},"recovery":{"type":"object","properties":{"quoteResponseLost":{"type":"string"},"paymentResponseLost":{"type":"string"},"pending":{"type":"string"},"rotationResponseLost":{"type":"string"},"keyResponseLost":{"type":"string"}},"required":["quoteResponseLost","paymentResponseLost","pending","rotationResponseLost","keyResponseLost"]},"ownerAccess":{"type":"object","properties":{"optional":{"type":"boolean"},"instruction":{"type":"string"},"emailDelivery":{"type":"string"}},"required":["optional","instruction","emailDelivery"]}},"required":["title","preflight","authentication","steps","recovery","ownerAccess"]}]}}},"paths":{"/capabilities":{"get":{"summary":"Capabilities","operationId":"get__capabilities","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentCapabilities"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"security":[],"description":"Start here to discover onboarding and terms links, current payment network, whether billing details are required, and the email-independent activation flow. No SolidRPC management token is required. Discovery remains readable when account operations are paused. Check availability for configured operation flags. These flags do not replace per-request eligibility, validation, or a health check. Pricing describes new prepaid account defaults, not an existing account quote."}},"/networks":{"get":{"summary":"List networks","operationId":"get__networks","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"security":[]}},"/me":{"get":{"summary":"Credential identity","operationId":"get__me","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"accountId":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"bootstrap":{"type":"boolean"}},"required":["accountId","scopes","bootstrap"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}}}},"/accounts":{"post":{"summary":"Provision account","operationId":"post__accounts","responses":{"200":{"description":"Existing provisioning recovered using the same secret","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionedAccount"}}}},"201":{"description":"Account created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionedAccount"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254,"description":"Owner’s permanent email, normalized to lowercase."},"name":{"type":"string","maxLength":80},"bootstrapSecret":{"type":"string","pattern":"^sa_[a-f0-9]{64}$","writeOnly":true},"termsRevision":{"const":"agent-prepaid-2026-10-28-v4"}},"required":["email","bootstrapSecret","termsRevision"],"additionalProperties":true}}}},"description":"Creates a provisional account without email verification or a password. Read and obtain owner authorization for the linked terms first. Persist a cryptographically random bootstrapSecret before the request. Retry with the same email and secret. Provisioning spends nothing. Only funding and budget operations are available until settlement and credential rotation."}},"/claim":{"post":{"summary":"Email owner claim link","operationId":"post__claim","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"email":{"type":"string","format":"email","maxLength":254}},"required":["email"],"additionalProperties":true}}}},"description":"Optional owner dashboard-access flow. Not required for agent funding, credential activation, API key creation, or RPC requests. Completing a claim verifies ownership and sets a password while preserving existing agent credentials and RPC keys."}},"/claim/complete":{"post":{"summary":"Consume owner claim","operationId":"post__claim_complete","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"}},"required":["message"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"token":{"type":"string","pattern":"^[a-f0-9]{64}$","writeOnly":true},"password":{"type":"string","minLength":12,"maxLength":128,"writeOnly":true}},"required":["token","password"],"additionalProperties":true}}}},"description":"Optional owner dashboard-access flow. Not required for agent funding, credential activation, API key creation, or RPC requests. Completing a claim verifies ownership and sets a password while preserving existing agent credentials and RPC keys."}},"/billing":{"get":{"summary":"Prepaid balance and effective entitlement","operationId":"get__billing","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["billing:read"],"description":"Requires billing:read."}},"/billing-details":{"get":{"summary":"Existing plan/card billing details","operationId":"get__billing_details","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["billing:read"],"description":"Requires billing:read."}},"/billing/profile":{"patch":{"summary":"Set billing details for prepaid tax calculation","operationId":"patch__billing_profile","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"updated":{"const":true}},"required":["updated"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Optional.","maxLength":150},"country":{"type":"string","description":"Uppercase ISO 3166-1 alpha-2 country code, for example DE, US, or CA."},"line1":{"type":"string","description":"Required for US customers when automatic tax is enabled. Optional otherwise.","maxLength":200},"city":{"type":"string","description":"Required for US customers when automatic tax is enabled. Optional otherwise.","maxLength":100},"postalCode":{"type":"string","maxLength":25},"taxId":{"type":"string","description":"Omit this field. With automatic tax enabled, a nonempty value blocks funding with tax_id_review_required because exemptions are unsupported.","maxLength":50},"state":{"type":"string","maxLength":100,"description":"Required for US customers when automatic tax is enabled. Optional otherwise."}},"additionalProperties":false}}},"description":"Replaces the saved billing profile. Read current billing requirements before writing. Omitted fields are removed, not preserved."},"description":"Requires funding:write. Replaces the stored profile. Read /capabilities.billing. With automatic tax enabled, provide country and postalCode. US customers also provide line1, city, and state for local tax accuracy. Name is optional. Use the customer location, never the agent server IP. Omit taxId. A missing or invalid profile blocks a quote, not account creation.","x-required-scopes":["funding:write"]}},"/budgets/challenges":{"post":{"summary":"Request wallet-signed budget challenge","operationId":"post__budgets_challenges","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"walletAddress":{"type":"string","pattern":"^0x[0-9a-fA-F]{40}$"},"kind":{"enum":["ONCE","MONTHLY"]},"paymentCapCents":{"type":"integer","minimum":100,"maximum":100000000},"usageCapCents":{"type":"integer","minimum":1,"maximum":100000000},"termsRevision":{"const":"agent-prepaid-2026-10-28-v4"}},"additionalProperties":true,"required":["walletAddress","kind","paymentCapCents","usageCapCents","termsRevision"]}}}},"x-required-scopes":["budget:write"],"description":"Requires budget:write."}},"/budgets/authorize":{"post":{"summary":"Submit owner-authorized wallet signature","operationId":"post__budgets_authorize","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"challengeId":{"type":"string","format":"uuid"},"signature":{"type":"string","pattern":"^0x[0-9a-fA-F]+$","maxLength":8192}},"additionalProperties":true,"required":["challengeId","signature"]}}}},"x-required-scopes":["budget:write"],"description":"Requires budget:write."}},"/budgets":{"patch":{"summary":"Reduce ceilings without increasing authority","operationId":"patch__budgets","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"paymentCapCents":{"type":"integer","minimum":0},"usageCapCents":{"type":"integer","minimum":0}},"required":["paymentCapCents","usageCapCents"],"additionalProperties":true}}}},"description":"Requires budget:write. Both ceilings are required. This operation only reduces them. An increase requires a new wallet-signed budget authorization. Do not infer owner approval from a management token.","x-required-scopes":["budget:write"]}},"/budgets/pause":{"post":{"summary":"Pause new spending and funding","operationId":"post__budgets_pause","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"description":"Requires budget:write. No JSON request body is used.","x-required-scopes":["budget:write"]}},"/funding":{"post":{"summary":"Reserve a USDC top-up quote","operationId":"post__funding","responses":{"201":{"description":"Created or original idempotent quote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingIntent"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"422":{"description":"billing_details_required includes details.fields. billing_location_invalid requires correcting the customer location. tax_id_review_required means exemptions are unsupported."},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"amountCents":{"type":"integer","minimum":100,"maximum":1000000,"description":"Total payment in USD cents, inclusive of applicable tax. The quote reports net RPC credit separately."}},"additionalProperties":true,"required":["amountCents"]}}}},"description":"Requires funding:write. Creates a quote within the signed payment ceiling. Persist and reuse Idempotency-Key on retries. amountCents includes tax. creditCents is the net amount added to RPC credit. Payment occurs only after submitting a signed x402 proof to /funding/{id}/pay.","x-required-scopes":["funding:write"]}},"/funding/{id}":{"get":{"summary":"Poll the original payment intent","operationId":"get__funding_id","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingIntent"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"description":"Requires billing:read. Returns HTTP 200 with the current status, including SUBMITTED. Poll the same intent with backoff. See onboarding.recovery before retrying uncertain payments.","x-required-scopes":["billing:read"]}},"/funding/{id}/pay":{"post":{"summary":"x402 top-up payment","operationId":"post__funding_id_pay","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingIntent"}}}},"202":{"description":"Settlement pending. Poll original funding intent; do not pay again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingIntent"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"402":{"description":"Payment required","headers":{"PAYMENT-REQUIRED":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingIntent"}}}},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"PAYMENT-SIGNATURE","in":"header","schema":{"type":"string","description":"Base64 x402 v2 proof; omission requests the quote."}}],"description":"Requires funding:write. No JSON request body is used.","x-required-scopes":["funding:write"]}},"/credentials/rotate":{"post":{"summary":"Issue replacement; retire previous only after saving","operationId":"post__credentials_rotate","responses":{"201":{"description":"New management credential created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManagementCredential"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":80,"description":"Defaults to Agent when omitted or empty."}},"required":[],"additionalProperties":true}}}},"description":"Requires credential:rotate. Send {} to use the default name. Saves a new credential without revoking the old one. Persist and verify the replacement before explicitly revoking the old credential.","x-required-scopes":["credential:rotate"]}},"/credentials/current":{"delete":{"summary":"Revoke current credential","operationId":"delete__credentials_current","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"revoked":{"const":true}},"required":["revoked"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}}}},"/keys":{"get":{"summary":"List RPC key metadata (no secrets)","operationId":"get__keys","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"keyPrefix":{"type":"string"},"isActive":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time"},"lastUsedAt":{"type":["string","null"],"format":"date-time"}},"required":["id","name","keyPrefix","isActive","createdAt","lastUsedAt"],"additionalProperties":true}}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["keys:read"],"description":"Requires keys:read."},"post":{"summary":"Idempotently create an RPC key","operationId":"post__keys","responses":{"201":{"description":"Created or original idempotent key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatedRpcKey"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":16,"maxLength":128}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","maxLength":80,"description":"Trimmed. Defaults to Agent when omitted or empty. Whitespace-only names are rejected."}},"required":[],"additionalProperties":true}}}},"description":"Send {} to use the default name. Requires keys:write and a stable Idempotency-Key. Persists the same key for retries with that credential and idempotency key.","x-required-scopes":["keys:write"]}},"/keys/{id}/secret":{"get":{"summary":"Reveal an owned RPC key","operationId":"get__keys_id_secret","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"key":{"type":"string","pattern":"^ak_[a-f0-9]{64}$","description":"RPC secret. Never log or include in chat."}},"required":["id","key"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["keys:reveal"],"description":"Requires keys:reveal."}},"/keys/{id}/settings":{"get":{"summary":"Read API key security policy","operationId":"get__keys_id_settings","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySettings"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["keys:read"],"description":"Requires keys:read."},"patch":{"summary":"Update API key security policy","operationId":"patch__keys_id_settings","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySettings"}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeySettingsInput"},"examples":{"restrictedReadOnly":{"summary":"Illustrative complete policy, preserve your actual existing restrictions","value":{"jwtRequired":false,"jwtIssuer":null,"jwtMaxLifetimeSeconds":3600,"allowedIpCidrs":["203.0.113.8/32"],"allowedChainIds":[1],"allowedMethods":["eth_chainId","eth_blockNumber"],"rateLimitRpsCap":10}}}}}},"description":"Requires keys:write and advanced API-key security eligibility. Despite PATCH, this atomically REPLACES the complete policy. All seven fields are required. First GET the current settings and GET /keys/capabilities, then submit only the seven writable fields, preserving restrictions not explicitly authorized to change. Do not copy response metadata into the request. Empty arrays and null clear the corresponding restrictions. Enabling jwtRequired needs an installed verification key. A 409 can indicate a concurrent update or missing verifier. On uncertain outcomes, read back before retrying. There is no optimistic concurrency precondition.","x-required-scopes":["keys:write"]}},"/keys/{id}":{"delete":{"summary":"Revoke an RPC key","operationId":"delete__keys_id","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["keys:write"],"description":"Requires keys:write."}},"/keys/{id}/jwt-keys":{"post":{"summary":"Add a JWT verifier public key","operationId":"post__keys_id_jwt_keys","responses":{"201":{"description":"Successful result","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/JwtVerifierKey"},{"type":"object","properties":{"policyRevision":{"type":"integer"}},"required":["policyRevision"],"additionalProperties":true}]}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JwtVerifierKeyInput"}}}},"description":"Requires keys:write and advanced API-key security eligibility. At most three verifier keys per RPC key. Names and public-key fingerprints must be unique. Read back after an uncertain result before attempting another write.","x-required-scopes":["keys:write"]}},"/keys/{id}/jwt-keys/{verifierId}":{"delete":{"summary":"Remove a JWT verifier","operationId":"delete__keys_id_jwt_keys_verifierId","responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"policyRevision":{"type":"integer"}},"required":["message","policyRevision"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"verifierId","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["keys:write"],"description":"Requires keys:write."}},"/usage":{"get":{"summary":"Read account usage analytics","operationId":"get__usage","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["usage:read"],"description":"Requires usage:read."}},"/support/config":{"get":{"summary":"Support entitlement","operationId":"get__support_config","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["support:read"],"description":"Requires support:read."}},"/support/tickets":{"get":{"summary":"List support tickets","operationId":"get__support_tickets","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["support:read"],"description":"Requires support:read."},"post":{"summary":"Create support ticket","operationId":"post__support_tickets","responses":{"201":{"description":"Support ticket created"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string","minLength":1,"maxLength":200},"message":{"type":"string","minLength":5,"maxLength":5000},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/SupportAttachmentInput"},"maxItems":5}},"required":["subject","message"],"additionalProperties":true}}}},"description":"Requires support:write and a support-enabled entitlement. Agent requests do not require reCAPTCHA. Read GET /support/config for file limits and channel availability.","x-required-scopes":["support:write"]}},"/support/tickets/{id}":{"get":{"summary":"Read support ticket","operationId":"get__support_tickets_id","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["support:read"],"description":"Requires support:read."}},"/support/tickets/{id}/messages":{"get":{"summary":"Read ticket messages","operationId":"get__support_tickets_id_messages","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"x-required-scopes":["support:read"],"description":"Requires support:read."},"post":{"summary":"Reply to owned ticket","operationId":"post__support_tickets_id_messages","responses":{"200":{"description":"Reply recorded"},"202":{"description":"Reply queued"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","minLength":1,"maxLength":5000},"attachments":{"type":"array","items":{"$ref":"#/components/schemas/SupportAttachmentInput"},"maxItems":5}},"required":["message"],"additionalProperties":true}}}},"x-required-scopes":["support:write"],"description":"Requires support:write."}},"/support/tickets/{id}/close":{"post":{"summary":"Close owned ticket","operationId":"post__support_tickets_id_close","responses":{"200":{"description":"Successful result"},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"description":"Requires support:write. No JSON request body is used.","x-required-scopes":["support:write"]}},"/onboarding":{"get":{"summary":"Read the complete agent onboarding sequence","operationId":"get_onboarding","security":[],"responses":{"200":{"description":"Published onboarding instructions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentOnboarding"}}}}}}},"/terms":{"get":{"summary":"Read the current exact prepaid terms","operationId":"get_terms","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"contentType":{"const":"text/markdown"},"text":{"type":"string"}},"required":["revision","sha256","contentType","text"],"additionalProperties":true}}}}}}},"/terms/{revision}":{"get":{"summary":"Read an immutable prepaid terms revision","operationId":"get_terms_revision","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"contentType":{"const":"text/markdown"},"text":{"type":"string"}},"required":["revision","sha256","contentType","text"],"additionalProperties":true}}}},"404":{"description":"This revision is not published."},"410":{"description":"Revision archived. Request the accepted record through support."}},"parameters":[{"name":"revision","in":"path","required":true,"schema":{"type":"string"},"description":"Use termsRevision from /capabilities."}],"description":"Returns a published immutable revision. Archived revisions return 410. Existing authorizations remain valid. Account owners can request their exact accepted record from support."}},"/example":{"get":{"summary":"Resumable account setup walkthrough with request and response examples","operationId":"get_example","security":[],"responses":{"200":{"description":"Resumable account setup walkthrough with request and response examples","content":{"application/json":{"schema":{"type":"object","required":["text","contentType"],"properties":{"text":{"type":"string"},"contentType":{"const":"text/markdown"}}}}}}}}},"/general-terms":{"get":{"summary":"General Terms of Service referenced by the prepaid schedule","operationId":"get_general_terms","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"contentType":{"const":"text/markdown"},"text":{"type":"string"}},"required":["revision","sha256","contentType","text"],"additionalProperties":true}}}}}}},"/example.mjs":{"get":{"summary":"Resumable account setup example source","operationId":"get_example_source","security":[],"responses":{"200":{"description":"JavaScript source. Read the example walkthrough before execution.","content":{"text/javascript":{"schema":{"type":"string"}}}}}}},"/general-terms/{revision}":{"get":{"summary":"General Terms of Service referenced by the prepaid schedule","security":[],"responses":{"200":{"description":"Successful result","content":{"application/json":{"schema":{"type":"object","properties":{"revision":{"type":"string"},"sha256":{"type":"string","pattern":"^[a-f0-9]{64}$"},"contentType":{"const":"text/markdown"},"text":{"type":"string"}},"required":["revision","sha256","contentType","text"],"additionalProperties":true}}}}},"parameters":[{"name":"revision","in":"path","required":true,"schema":{"type":"string"}}]}},"/keys/capabilities":{"get":{"summary":"Read security eligibility and limits before a policy update","operationId":"get__keys_capabilities","description":"Requires keys:read. Check enabled before security writes. Does not grant additional permissions.","responses":{"200":{"description":"Security capabilities","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"maxJwtVerifierKeys":{"type":"integer"},"supportedJwtAlgorithms":{"type":"array","items":{"enum":["RS256","ES256"]}},"minJwtLifetimeSeconds":{"type":"integer"},"maxJwtLifetimeSeconds":{"type":"integer"},"defaultJwtMaxLifetimeSeconds":{"type":"integer"},"maxAllowedIpCidrs":{"type":"integer"},"maxAllowedChainIds":{"type":"integer"},"maxAllowedMethods":{"type":"integer"},"websocketEligible":{"type":"boolean"}},"required":["enabled","maxJwtVerifierKeys","supportedJwtAlgorithms","minJwtLifetimeSeconds","maxJwtLifetimeSeconds","defaultJwtMaxLifetimeSeconds","maxAllowedIpCidrs","maxAllowedChainIds","maxAllowedMethods","websocketEligible"],"additionalProperties":true}}}},"400":{"description":"Invalid input"},"401":{"description":"Invalid or revoked credential"},"403":{"description":"Scope missing, Free account, suspended, or owner action required"},"409":{"description":"Idempotency or state conflict"},"429":{"description":"Retry with backoff"},"503":{"description":"Unavailable; financial paths fail closed"}},"x-required-scopes":["keys:read"]}}},"externalDocs":{"description":"Agent onboarding, billing requirements, and credential activation","url":"https://api.solidrpc.io/agent/v1/onboarding"}}