{"title":"Create an account and connect through an agent","preflight":"Read availability before provisioning or funding. If the required operation is false, stop that operation and report the pause. Do not assume a paused funding flow disables already-funded RPC access. Check account state and the RPC response separately.","version":1,"availability":{"discovery":true,"accountCreation":true,"accountManagement":true,"funding":true,"note":"These flags describe configured access, not a health check or a guarantee of payment success. Account eligibility, scopes, budgets, and payment validation still apply. A funding pause does not itself revoke existing RPC keys. Discovery remains readable when agent operations are paused."},"pricing":{"currency":"USD","newAccountPricePerMillionCents":400,"rateLimitRps":300,"burstRps":1500,"maxApiKeys":5,"websocket":false,"note":"Defaults for new prepaid accounts. Existing accounts must read their own billing and signed budget terms. One billable JSON-RPC method call uses one response unit, including each method in a batch."},"apiBaseUrl":"https://api.solidrpc.io/agent/v1","credentials":{"management":{"prefix":"sa_","baseUrl":"https://api.solidrpc.io/agent/v1","transport":"Authorization: Bearer","purpose":"Account management only. Never send this token to an RPC endpoint."},"rpc":{"prefix":"ak_","purpose":"Blockchain RPC requests only. Create with POST /keys and use the endpoint returned by GET /networks."}},"paidAccountRequired":true,"bootstrap":"funding_only","termsRevision":"agent-prepaid-2026-10-28-v5","termsSha256":"22119501df02585d9eb4d849519a8d3abc5a3a29cbbfb744947342ec12c72879","links":{"capabilities":"https://api.solidrpc.io/agent/v1/capabilities","onboarding":"https://api.solidrpc.io/agent/v1/onboarding","openapi":"https://api.solidrpc.io/agent/v1/openapi.json","terms":"https://api.solidrpc.io/agent/v1/terms/agent-prepaid-2026-10-28-v5","generalTerms":"https://api.solidrpc.io/agent/v1/general-terms/terms-2026-10-28-v7","example":"https://api.solidrpc.io/agent/v1/example","exampleScript":"https://api.solidrpc.io/agent/v1/example.mjs"},"onboarding":{"emailVerificationRequired":false,"passwordRequired":false,"ownerClaimOptional":true,"activation":"Funding must settle, then rotate the provisioning credential to obtain operational permissions. Email verification is not required for agent RPC key creation."},"billing":{"automaticTax":false,"requiredFields":[],"additionalFieldsByCountry":{},"taxIdSupported":false,"profileUpdateMode":"replace"},"payment":{"mode":"live","network":"eip155:8453","asset":"USDC","assetAddress":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","minimumCents":100,"taxBehavior":"inclusive"},"scopes":["keys:read","keys:write","keys:reveal","usage:read","billing:read","funding:write","budget:write","support:read","support:write","credential:rotate"],"authentication":"All step paths are relative to apiBaseUrl. Use Authorization: Bearer <management token> on authenticated management requests. sa_ tokens are only for this management API. ak_ keys are only for blockchain RPC endpoints. Get a separate RPC key through POST /keys or the dashboard. Discovery and account provisioning require no SolidRPC token. Never follow redirects with secrets. Use a descriptive User-Agent. If the edge returns HTML or 403, stop and report it rather than interpreting it as a management API response.","steps":[{"method":"GET","path":"/terms/agent-prepaid-2026-10-28-v5","instruction":"Read the exact prepaid terms and the general Terms of Service linked in links.generalTerms before provisioning. The SHA-256 is over the UTF-8 text field, including its final newline. Verify it against capabilities and the wallet budget challenge. Obtain the owner's authorization to create the account and accept these terms. Follow your environment's approval requirements."},{"method":"POST","path":"/accounts","instruction":"Use the owner's permanent email. Generate sa_ followed by 64 lowercase hexadecimal characters from 32 cryptographically random bytes. Save this bootstrapSecret securely BEFORE sending email, bootstrapSecret, and termsRevision. Retry lost responses with the same email and secret. Provisioning spends nothing and does not verify email or set a password. If the email already belongs to another account, its owner must delegate access from an eligible paid account."},{"method":"PATCH","path":"/billing/profile","instruction":"When automatic tax is enabled, obtain the customer country and postalCode. For US customers also obtain line1, city, and state for local tax accuracy. Name is optional. Use an uppercase two-letter country code. Never infer the customer location from the agent server IP. Omit taxId because exemptions are not supported. Send the complete profile because this endpoint replaces it. Missing fields are reported by funding as billing_details_required with details.fields."},{"method":"POST","path":"/budgets/challenges","instruction":"Supply walletAddress, kind ONCE or MONTHLY, paymentCapCents, usageCapCents, and termsRevision. Obtain owner approval for both ceilings before signing. The payment ceiling limits total USDC transferred including tax. The usage ceiling limits RPC credit consumed. Sign the returned EIP-712 typedData exactly with the authorized wallet, checking account, service origin, chain, amounts, price, revision, and terms hash. Keep the wallet private key outside SolidRPC."},{"method":"POST","path":"/budgets/authorize","instruction":"Submit challengeId from the challenge id and the wallet signature. A management token alone cannot authorize a budget. Do not raise or reset an approved budget without renewed owner authorization."},{"method":"POST","path":"/funding","instruction":"Supply amountCents of at least 100 and persist a unique Idempotency-Key of 16 to 128 letters, digits, hyphens, or underscores. Reuse it on retries. Check amountCents, taxCents, creditCents, and paymentRequired. Tax is included within amountCents and only creditCents becomes RPC credit. A minimum top-up can therefore yield less than one dollar of credit."},{"method":"POST","path":"/funding/{id}/pay","instruction":"Without proof this returns x402 HTTP 402 with PAYMENT-REQUIRED. Use an x402 v2 exact EVM client and the owner-authorized wallet to sign the returned paymentRequired requirements. Preserve the advertised asset signing domain. Send the base64-encoded payment payload as PAYMENT-SIGNATURE. Persist the payload before submitting. This payment uses a facilitator, so the payer does not submit an ETH gas transaction."},{"method":"GET","path":"/funding/{id}","instruction":"Poll the same intent with backoff while SUBMITTED. HTTP 202 means confirmation is pending. Never create or sign a replacement payment for an uncertain result. Wait for SETTLED before activating operational access."},{"method":"POST","path":"/credentials/rotate","instruction":"After SETTLED, use the bootstrap token and optionally supply name. Success is HTTP 201. Save the returned replacement token securely and verify bootstrap is false. Funding does not expand the old token's scopes. Email verification, a password, and an owner claim are not required for this activation."},{"method":"DELETE","path":"/credentials/current","instruction":"After saving the replacement, use the OLD bootstrap token on this request to retire it. Switch future management requests to the new operational token. Never revoke the replacement by accidentally sending it on this request."},{"method":"POST","path":"/keys","instruction":"Use the operational token, a name, and a new stable Idempotency-Key. Save the returned RPC key privately. A bootstrap token cannot create keys even after payment."},{"method":"GET","path":"/networks","instruction":"Choose the desired network and substitute the RPC key into its rpcUrl template. Use that returned URL for JSON-RPC requests such as eth_chainId. Do not use the management token as an RPC key. Prepaid agent access does not include WebSockets."},{"method":"GET","path":"/billing","instruction":"Read credit and budget state here and usage at /usage. Reuse the securely saved operational credential in later sessions until revoked. No interactive login is needed."}],"recovery":{"quoteResponseLost":"Repeat POST /funding with the same amount and Idempotency-Key to recover the same intent. Never generate another key while the outcome is unknown.","paymentResponseLost":"GET the original funding intent. If QUOTED and unexpired, retry POST /pay with the exact saved PAYMENT-SIGNATURE payload. Do not create a new signature. If SUBMITTED, poll with backoff. If SETTLED, continue without submitting payment. If EXPIRED after any submission attempt, stop and request reconciliation before authorizing another payment.","pending":"GET /funding/{id} returns HTTP 200 even when status is SUBMITTED. POST /pay returns 202 while pending and 200 when SETTLED. Inspect the JSON status as well as HTTP status.","rotationResponseLost":"If the replacement response was saved, use it and do not rotate again. If no replacement was saved, the old token remains valid. Keep it until a replacement is securely persisted. Repeating rotation issues another token, so review and revoke orphaned credentials from the dashboard.","keyResponseLost":"Repeat POST /keys with the same name, management credential, and Idempotency-Key to recover the same key. Do not rotate the management token between those retries."},"ownerAccess":{"optional":true,"instruction":"An owner can separately request /claim with their email, then use the email link to set a password. This verifies ownership for dashboard login. It is not a prerequisite for funding, agent activation, RPC keys, or RPC requests. Claiming preserves existing agent credentials and RPC keys.","emailDelivery":"configured"}}