{"openapi":"3.0.0","info":{"title":"lit-api-server","description":"Lit Express Node API Server","version":"0.1.0"},"servers":[{"url":"/core/v1/","description":"Lit Protocol Express API (Core v1)"}],"paths":{"/list_api_keys":{"get":{"tags":["Account Management"],"operationId":"list_api_keys","parameters":[{"name":"page_number","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_size","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyItem"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/new_account":{"post":{"tags":["Account Management"],"description":"Create a new managed account: derives a fresh wallet, registers it on-chain, and provisions a Stripe customer with starter credits. Returns the account's API key and wallet address.\n\nNo authentication is required (this is how a caller obtains their first API key), but the endpoint is rate limited per client IP and may return 429 Too Many Requests when the node is under load or a single source creates accounts too quickly. Retry those with exponential backoff.","operationId":"new_account","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewAccountRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/NewAccountResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}},"429":{"description":"Too Many Requests — the node is CPU-overloaded and shedding load. Clients receiving this response should retry the request up to five times with exponential backoff."}}}},"/convert_to_chain_secured_account":{"post":{"tags":["Account Management"],"operationId":"convert_to_chain_secured_account","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertToChainSecuredAccountRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/account_exists":{"get":{"tags":["Account Management"],"operationId":"account_exists","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"boolean"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/create_wallet":{"get":{"tags":["Account Management"],"description":"Mint a new wallet (PKP) for the account.\n\nDeprecated: minting is a metered write, so it should not live on a GET — link previewers, prefetchers, and retrying proxies replay GETs. Use `POST /create_wallet` instead. This form is kept for backwards compatibility.","operationId":"create_wallet","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateWalletResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}},"deprecated":true},"post":{"tags":["Account Management"],"description":"Mint a new wallet (PKP) for the account.","operationId":"create_wallet_post","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateWalletResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/create_wallet_with_signature":{"post":{"tags":["Account Management"],"operationId":"create_wallet_with_signature","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWalletWithSignatureRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreateWalletWithSignatureResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/prepare_wallet":{"post":{"tags":["Account Management"],"description":"Return a fresh derived wallet address + derivation path — no signature, no API key.\n\nThe no-signature equivalent of `create_wallet_with_signature`: it collapses the ChainSecured owner ceremony into a single signed bind UserOp. Fetch the address here, then register it on-chain yourself with `registerWalletDerivation`.\n\nUnauthenticated, so it carries the same `CpuAvailable` load-shedding guard as `lit_action`: each request drives a dstack KDF call, and unlike the `_with_signature` siblings there is no EIP-712 verification in front of it, so the guard bounds how hard an anonymous caller can hammer the KDF path when the box is already saturated.\n\nNOT IDEMPOTENT: every call returns a brand-new wallet (a fresh random derivation path). Retrying returns a different address, and concurrent callers each get a separate wallet with no server-side dedup. See `docs/management/api_direct.mdx`.","operationId":"prepare_wallet","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/PrepareWalletResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}},"429":{"description":"Too Many Requests — the node is CPU-overloaded and shedding load. Clients receiving this response should retry the request up to five times with exponential backoff."}}}},"/delete_wallet":{"post":{"tags":["Account Management"],"description":"Permanently delete a wallet (PKP). HARD DELETE: wipes the on-chain derivation path so the key can never be re-derived and anything secured by it becomes unrecoverable. Requires the master (account) API key — usage API keys are rejected on-chain (`NotMasterAccount`).","operationId":"delete_wallet","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteWalletRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/lit_action":{"post":{"tags":["Actions"],"operationId":"lit_action","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LitActionRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LitActionResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}},"429":{"description":"Too Many Requests — the node is CPU-overloaded and shedding load. Clients receiving this response should retry the request up to five times with exponential backoff."}}}},"/get_lit_action_ipfs_id":{"post":{"tags":["Account Management"],"operationId":"get_lit_action_ipfs_id","requestBody":{"content":{"application/json":{"schema":{"type":"string"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_group":{"post":{"tags":["Account Management"],"operationId":"add_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AddGroupResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/remove_group":{"post":{"tags":["Account Management"],"operationId":"remove_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_action":{"post":{"tags":["Account Management"],"operationId":"add_action","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddActionRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/delete_action":{"post":{"tags":["Account Management"],"operationId":"delete_action","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteActionRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_action_to_group":{"post":{"tags":["Account Management"],"operationId":"add_action_to_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddActionToGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_pkp_to_group":{"post":{"tags":["Account Management"],"operationId":"add_pkp_to_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPkpToGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/remove_pkp_from_group":{"post":{"tags":["Account Management"],"operationId":"remove_pkp_from_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemovePkpFromGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_usage_api_key":{"post":{"tags":["Account Management"],"operationId":"add_usage_api_key","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddUsageApiKeyRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AddUsageApiKeyResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/add_usage_api_key_with_signature":{"post":{"tags":["Account Management"],"operationId":"add_usage_api_key_with_signature","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddUsageApiKeyWithSignatureRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AddUsageApiKeyWithSignatureResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/update_usage_api_key":{"post":{"tags":["Account Management"],"operationId":"update_usage_api_key","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUsageApiKeyRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/remove_usage_api_key":{"post":{"tags":["Account Management"],"operationId":"remove_usage_api_key","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveUsageApiKeyRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/update_group":{"post":{"tags":["Account Management"],"operationId":"update_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/remove_action_from_group":{"post":{"tags":["Account Management"],"operationId":"remove_action_from_group","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveActionFromGroupRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/update_action_metadata":{"post":{"tags":["Account Management"],"operationId":"update_action_metadata","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateActionMetadataRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/update_usage_api_key_metadata":{"post":{"tags":["Account Management"],"operationId":"update_usage_api_key_metadata","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUsageApiKeyMetadataRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/list_groups":{"get":{"tags":["Account Management"],"operationId":"list_groups","parameters":[{"name":"page_number","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_size","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/ListMetadataItem"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/list_wallets":{"get":{"tags":["Account Management"],"operationId":"list_wallets","parameters":[{"name":"page_number","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_size","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/WalletItem"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/list_wallets_in_group":{"get":{"tags":["Account Management"],"operationId":"list_wallets_in_group","parameters":[{"name":"group_id","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_number","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_size","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/WalletItem"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/list_actions":{"get":{"tags":["Account Management"],"operationId":"list_actions","parameters":[{"name":"group_id","in":"query","schema":{"type":"string","nullable":true}},{"name":"page_number","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"page_size","in":"query","required":true,"schema":{"type":"integer","format":"uint64","minimum":0.0}},{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/ListMetadataItem"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_node_chain_config":{"get":{"tags":["Account Management"],"operationId":"get_node_chain_config","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/NodeChainConfigResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_chain_config_keys":{"get":{"tags":["Account Management"],"operationId":"get_chain_config_keys","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/ChainConfigKeysResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_lit_action_client_config":{"get":{"tags":["Configuration"],"operationId":"get_lit_action_client_config","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LitActionClientConfigResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/cache_metadata":{"get":{"tags":["Configuration"],"description":"CPL-351: metadata about the action code cached for the caller's account. Returns TTL/size/last-run metadata only — never the cached code itself.","operationId":"get_cache_metadata","parameters":[{"name":"X-Api-Key","in":"header","description":"Account or usage API key. Alternatively use Authorization: Bearer <key>.","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CacheMetadataResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_supported_languages":{"get":{"tags":["Configuration"],"description":"Advertises the node's language capability surface: which languages, runtimes, and execution methods this node admits. No guards — like `get_lit_action_client_config`, it exists so clients can discover capability before uploading anything.","operationId":"get_supported_languages","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SupportedLanguagesResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_api_payers":{"get":{"tags":["Configuration"],"operationId":"get_api_payers","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"type":"string"}},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_admin_api_payer":{"get":{"tags":["Configuration"],"operationId":"get_admin_api_payer","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"type":"string"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/billing/stripe_config":{"get":{"tags":["Billing"],"description":"GET /billing/stripe_config — returns the Stripe publishable key. No auth required; the publishable key is safe to expose.","operationId":"billing_stripe_config","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/StripeConfigResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/billing/balance":{"get":{"tags":["Billing"],"description":"GET /billing/balance — returns the current credit balance for the authenticated user.\n\n`force=true` drops the cached balance before reading so a credit added directly in Stripe surfaces immediately, without waiting out the 10-minute cache TTL or having to run a Lit Action. A plain re-read is not enough: the stale-while-revalidate background refresh deliberately ignores credit *increases* (it only adopts a balance that went up, to preserve optimistic charge decrements), so the cache must be invalidated to pick up a top-up.","operationId":"billing_balance","parameters":[{"name":"force","in":"query","schema":{"type":"boolean","nullable":true}},{"name":"X-Api-Key","in":"header","description":"API-mode auth: account or usage API key (alternatively `Authorization: Bearer <key>`). OR — for ChainSecured callers — omit X-Api-Key entirely and send `X-Wallet-Auth: <base64(JSON{typed_data, signature})>` where `typed_data` is EIP-712 with `primaryType: \"BillingAuth\"`. The signature proves wallet possession; the typed data must include the connected wallet address and an issuedAt timestamp within ±5 minutes.","schema":{"type":"string"}}],"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/BillingBalanceResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/billing/create_payment_intent":{"post":{"tags":["Billing"],"description":"POST /billing/create_payment_intent — creates a Stripe PaymentIntent and returns the client_secret for use with Stripe.js `confirmCardPayment`.","operationId":"billing_create_payment_intent","parameters":[{"name":"X-Api-Key","in":"header","description":"Billing owner only: account master API key or verified X-Wallet-Auth. Execution usage keys cannot manage funding or saved-card settings.","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentIntentRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CreatePaymentIntentResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/billing/confirm_payment":{"post":{"tags":["Billing"],"description":"POST /billing/confirm_payment — verifies a succeeded PaymentIntent and credits the account.","operationId":"billing_confirm_payment","parameters":[{"name":"X-Api-Key","in":"header","description":"Billing owner only: account master API key or verified X-Wallet-Auth. Execution usage keys cannot manage funding or saved-card settings.","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfirmPaymentRequest"}}},"required":true},"responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/AccountOpResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/version":{"get":{"tags":["Configuration"],"operationId":"get_version","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/VersionResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}},"/get_system_stats":{"get":{"tags":["Configuration"],"operationId":"get_system_stats","responses":{"default":{"description":"","content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/SystemStatsResponse"},{"$ref":"#/components/schemas/ErrMessage"}]}}}}}}}},"components":{"schemas":{"ApiKeyItem":{"description":"One item from list_api_keys (AccountConfig.sol UsageApiKey).","type":"object","required":["api_key_hash","balance","can_add_pkp_to_groups","can_create_groups","can_create_pkps","can_delete_groups","can_execute_in_groups","can_manage_ipfs_ids_in_groups","can_remove_pkp_from_groups","description","expiration","id","name"],"properties":{"id":{"type":"string"},"api_key_hash":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"expiration":{"type":"string"},"balance":{"type":"integer","format":"uint64","minimum":0.0},"can_create_groups":{"type":"boolean"},"can_delete_groups":{"type":"boolean"},"can_create_pkps":{"type":"boolean"},"can_manage_ipfs_ids_in_groups":{"type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"can_add_pkp_to_groups":{"type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"can_remove_pkp_from_groups":{"type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"can_execute_in_groups":{"type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}}}},"ErrMessage":{"type":"string"},"NewAccountResponse":{"type":"object","required":["api_key","wallet_address"],"properties":{"api_key":{"type":"string"},"wallet_address":{"type":"string"}}},"NewAccountRequest":{"type":"object","required":["account_description","account_name"],"properties":{"account_name":{"type":"string"},"account_description":{"type":"string"},"email":{"description":"Optional email address — forwarded to Stripe for the customer record.  Not stored on-chain.","default":null,"type":"string","nullable":true}}},"AccountOpResponse":{"description":"Response for account config operations (add_pkp_to_group, remove_pkp_from_group, add_usage_api_key, remove_usage_api_key).","type":"object","required":["success"],"properties":{"success":{"type":"boolean"}}},"ConvertToChainSecuredAccountRequest":{"description":"Body for `convert_to_chain_secured_account`. The caller is authenticated by their existing API key (header). The supplied wallet becomes the on-chain admin and the account flips from managed to ChainSecured. The conversion is irreversible.","type":"object","required":["new_admin_wallet_address","signature","typed_data"],"properties":{"new_admin_wallet_address":{"description":"Hex-encoded EVM address (with or without 0x prefix). Must be the wallet the user controls; verified by an EIP-712 typed-data signature.","type":"string"},"typed_data":{"description":"EIP-712 typed-data object the wallet signed. Must use `primaryType: \"ConvertAccount\"` and the canonical schema (see `core::eip712`)."},"signature":{"description":"65-byte 0x-prefixed signature (r||s||v) over the EIP-712 digest of `typed_data`.","type":"string"}}},"CreateWalletResponse":{"type":"object","required":["wallet_address"],"properties":{"wallet_address":{"type":"string"}}},"CreateWalletWithSignatureResponse":{"description":"Returned by `/create_wallet_with_signature`. The client must follow up with an on-chain `registerWalletDerivation(adminHash, wallet_address, derivation_path, name, description)` call signed by the same wallet — until that lands, the PKP exists in MPC but is not registered to any account.","type":"object","required":["derivation_path","wallet_address"],"properties":{"wallet_address":{"type":"string"},"derivation_path":{"description":"0x-prefixed lowercase hex (uint256). Pass through verbatim to `registerWalletDerivation`'s `derivationPath` arg.","type":"string"}}},"CreateWalletWithSignatureRequest":{"description":"ChainSecured wallet creation. The client signs EIP-712 typed data with their wallet; the server verifies the signature, mints a PKP via DStack MPC, and returns the new wallet address + derivation path so the client can register it on-chain via `registerWalletDerivation`.\n\nThe server does not maintain a nonce store. Replay protection is a ±5-minute window on the `issuedAt` field plus the per-flow primaryType binding — worst-case replay still just mints an extra unregistered PKP (compute cost only; registration requires a separate wallet signature on-chain).","type":"object","required":["signature","typed_data"],"properties":{"typed_data":{"description":"EIP-712 typed-data object the wallet signed. Must use `primaryType: \"CreateWallet\"` and the canonical schema (see `core::eip712`)."},"signature":{"description":"65-byte 0x-prefixed signature (r||s||v) over the EIP-712 digest of `typed_data`.","type":"string"}}},"PrepareWalletResponse":{"description":"Returned by `POST /prepare_wallet`. Same shape as `CreateWalletWithSignatureResponse` but obtained with no owner signature and no API key. The client MUST follow up with an on-chain `registerWalletDerivation(adminHash, wallet_address, derivation_path, name, description)` call — until that lands the PKP exists in MPC but is registered to no account, which makes an un-registered response equivalent to a discarded keypair.\n\nNOT IDEMPOTENT: every call returns a brand-new wallet (a fresh random derivation path). Retrying does not return the previous address; concurrent callers each get a different wallet with no server-side dedup. See `docs/management/api_direct.mdx` for the full concurrency semantics.","type":"object","required":["derivation_path","wallet_address"],"properties":{"wallet_address":{"type":"string"},"derivation_path":{"description":"0x-prefixed lowercase hex (uint256). Pass through verbatim to `registerWalletDerivation`'s `derivationPath` arg.","type":"string"}}},"DeleteWalletRequest":{"description":"Request for delete_wallet (AccountConfig.removeWalletDerivation). Master (account) API key via header — usage API keys are rejected on-chain (`NotMasterAccount`).\n\nHARD DELETE: permanently and irreversibly removes the wallet (PKP) and wipes its on-chain derivation path. Anything secured by the wallet becomes unrecoverable.","type":"object","required":["wallet_address"],"properties":{"wallet_address":{"description":"Wallet (PKP) address to permanently delete: 20-byte hex, with an optional `0x`/`0X` prefix.","type":"string"}}},"LitActionResponse":{"type":"object","required":["has_error","logs","response"],"properties":{"response":{},"logs":{"type":"string"},"has_error":{"type":"boolean"}}},"LitActionRequest":{"description":"API key via header.\n\nProvide either `code` (inline JS) or `ipfs_id` (IPFS CID of a previously-cached action). When `code` is provided it is cached by its IPFS hash so subsequent calls can use `ipfs_id`.","type":"object","properties":{"code":{"description":"Inline JS source. Optional when `ipfs_id` is supplied.","default":null,"type":"string","nullable":true},"ipfs_id":{"description":"IPFS CID of a previously-submitted action. Looked up in the in-memory cache.","default":null,"type":"string","nullable":true},"js_params":{"nullable":true}}},"AddGroupResponse":{"description":"Response for add_group, includes the on-chain group ID.","type":"object","required":["group_id","success"],"properties":{"success":{"type":"boolean"},"group_id":{"type":"string"}}},"AddGroupRequest":{"description":"Request for add_group. permitted_actions and pkps are keccak256 hashes as hex strings (with or without 0x). API key via header.","type":"object","required":["cid_hashes_permitted","group_description","group_name","pkp_ids_permitted"],"properties":{"group_name":{"description":"Name of the group (Group.metadata.name in AccountConfig.sol).","type":"string"},"group_description":{"description":"Description of the group (Group.metadata.description in AccountConfig.sol).","type":"string"},"pkp_ids_permitted":{"description":"pkp ids permitted to use the group (AccountConfig.sol Group.pkpId).","type":"array","items":{"type":"string"}},"cid_hashes_permitted":{"description":"Actions permitted to use the group (AccountConfig.sol Group.cidHash).","type":"array","items":{"type":"string"}}}},"RemoveGroupRequest":{"type":"object","required":["group_id"],"properties":{"group_id":{"type":"string"}}},"AddActionRequest":{"type":"object","required":["action_ipfs_cid","description","name"],"properties":{"action_ipfs_cid":{"description":"IPFS CID for the action (keccak256-hashed on server).","type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"DeleteActionRequest":{"description":"Request for delete_action. hashed_cid is already a keccak256 hash (hex string). API key via header.","type":"object","required":["hashed_cid"],"properties":{"hashed_cid":{"description":"Already-hashed CID for the action (0x-prefixed hex string).","type":"string"}}},"AddActionToGroupRequest":{"type":"object","required":["action_ipfs_cid","group_id"],"properties":{"group_id":{"type":"integer","format":"uint64","minimum":0.0},"action_ipfs_cid":{"description":"IPFS CID for the action (will be keccak256-hashed on server).","type":"string"}}},"AddPkpToGroupRequest":{"type":"object","required":["group_id","pkp_id"],"properties":{"group_id":{"description":"Group ID (decimal or hex string).","type":"integer","format":"uint64","minimum":0.0},"pkp_id":{"type":"string"}}},"RemovePkpFromGroupRequest":{"type":"object","required":["group_id","pkp_id"],"properties":{"group_id":{"type":"integer","format":"uint64","minimum":0.0},"pkp_id":{"type":"string"}}},"AddUsageApiKeyResponse":{"description":"Response for account config operations (add_group, add_pkp_to_group, remove_pkp_from_group, add_usage_api_key, remove_usage_api_key).","type":"object","required":["success","usage_api_key"],"properties":{"success":{"type":"boolean"},"usage_api_key":{"type":"string"}}},"AddUsageApiKeyRequest":{"description":"Request for add_usage_api_key. expiration and balance as decimal strings (e.g. unix timestamp, wei). API key via header.","type":"object","required":["add_pkp_to_groups","can_create_groups","can_create_pkps","can_delete_groups","description","execute_in_groups","manage_ipfs_ids_in_groups","name","remove_pkp_from_groups"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"can_create_groups":{"type":"boolean"},"can_delete_groups":{"type":"boolean"},"can_create_pkps":{"type":"boolean"},"manage_ipfs_ids_in_groups":{"description":"Group IDs to grant manage-IPFS-IDs permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"add_pkp_to_groups":{"description":"Group IDs to grant add-PKP permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"remove_pkp_from_groups":{"description":"Group IDs to grant remove-PKP permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"execute_in_groups":{"description":"Group IDs to grant execute permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}}}},"AddUsageApiKeyWithSignatureResponse":{"description":"Returned by `/add_usage_api_key_with_signature`. The client must follow up with on-chain `registerWalletDerivation(adminHash, wallet_address, derivation_path, name, description)` and `setUsageApiKey(adminHash, keccak256(usage_api_key), …)` — both signed by the admin wallet — to attach the usage key to the ChainSecured account.","type":"object","required":["derivation_path","usage_api_key","wallet_address"],"properties":{"usage_api_key":{"description":"Base64-encoded 32-byte secret. Send as `X-Api-Key` / `Authorization: Bearer …` for usage requests; pass `keccak256(this)` to `setUsageApiKey`.","type":"string"},"wallet_address":{"description":"0x-prefixed lowercase hex EVM address of the minted PKP wallet.","type":"string"},"derivation_path":{"description":"0x-prefixed lowercase hex (uint256). Pass through verbatim to `registerWalletDerivation`'s `derivationPath` arg.","type":"string"}}},"AddUsageApiKeyWithSignatureRequest":{"description":"ChainSecured usage-key minting. Mirrors `CreateWalletWithSignatureRequest`: the user proves wallet ownership with an EIP-712 typed-data signature, the server mints a usage-key wallet via DStack MPC and returns the secret (as the usage API key) plus address + derivation path. The client follows up with on-chain `registerWalletDerivation` and `setUsageApiKey` signed by their admin wallet — only the admin wallet of a ChainSecured account can call `setUsageApiKey` (see AppStorage.accountExistsAndIsMutable).","type":"object","required":["signature","typed_data"],"properties":{"typed_data":{"description":"EIP-712 typed-data object the wallet signed. Must use `primaryType: \"AddUsageApiKey\"` and the canonical schema (see `core::eip712`)."},"signature":{"description":"65-byte 0x-prefixed signature (r||s||v) over the EIP-712 digest of `typed_data`.","type":"string"}}},"UpdateUsageApiKeyRequest":{"description":"Request for update_usage_api_key. Updates all permissions and metadata on an existing usage API key. API key via header.","type":"object","required":["add_pkp_to_groups","can_create_groups","can_create_pkps","can_delete_groups","description","execute_in_groups","manage_ipfs_ids_in_groups","name","remove_pkp_from_groups","usage_api_key"],"properties":{"usage_api_key":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"can_create_groups":{"type":"boolean"},"can_delete_groups":{"type":"boolean"},"can_create_pkps":{"type":"boolean"},"manage_ipfs_ids_in_groups":{"description":"Group IDs to grant manage-IPFS-IDs permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"add_pkp_to_groups":{"description":"Group IDs to grant add-PKP permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"remove_pkp_from_groups":{"description":"Group IDs to grant remove-PKP permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}},"execute_in_groups":{"description":"Group IDs to grant execute permission. 0 is wildcard for all groups.","type":"array","items":{"type":"integer","format":"uint64","minimum":0.0}}}},"RemoveUsageApiKeyRequest":{"description":"API key via header.","type":"object","required":["usage_api_key"],"properties":{"usage_api_key":{"type":"string"}}},"UpdateGroupRequest":{"description":"Request for update_group (AccountConfig.updateGroup). API key via header.","type":"object","required":["description","group_id","name"],"properties":{"group_id":{"description":"Group ID (decimal or hex string).","type":"integer","format":"uint64","minimum":0.0},"name":{"type":"string"},"description":{"type":"string"},"pkp_ids_permitted":{"default":[],"type":"array","items":{"type":"string"}},"cid_hashes_permitted":{"default":[],"type":"array","items":{"type":"string"}}}},"RemoveActionFromGroupRequest":{"description":"Request for remove_action_from_group. hashed_cid is already a keccak256 hash (hex string). API key via header.","type":"object","required":["group_id","hashed_cid"],"properties":{"group_id":{"type":"integer","format":"uint64","minimum":0.0},"hashed_cid":{"description":"Already-hashed CID for the action (0x-prefixed hex string).","type":"string"}}},"UpdateActionMetadataRequest":{"description":"Request for update_action_metadata. hashed_cid is already a keccak256 hash (hex string). API key via header.","type":"object","required":["description","hashed_cid","name"],"properties":{"hashed_cid":{"description":"Already-hashed CID for the action (0x-prefixed hex string).","type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"UpdateUsageApiKeyMetadataRequest":{"description":"Request for update_usage_api_key_metadata (AccountConfig.updateUsageApiKeyMetadata). API key via header.","type":"object","required":["description","name","usage_api_key"],"properties":{"usage_api_key":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"ListMetadataItem":{"description":"One item from list_groups, list_wallets, list_wallets_in_group, or list_actions (AccountConfig.sol Metadata).","type":"object","required":["description","id","name"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"}}},"WalletItem":{"description":"One item from list_groups, list_wallets, list_wallets_in_group, or list_actions (AccountConfig.sol Metadata).","type":"object","required":["description","id","name","wallet_address"],"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"wallet_address":{"type":"string"}}},"NodeChainConfigResponse":{"type":"object","required":["chain_id","chain_name","contract_address","is_evm","testnet","token"],"properties":{"chain_name":{"type":"string"},"chain_id":{"type":"integer","format":"uint64","minimum":0.0},"is_evm":{"type":"boolean"},"testnet":{"type":"boolean"},"token":{"type":"string"},"contract_address":{"type":"string"}}},"ChainConfigKeysResponse":{"description":"GET /get_chain_config_keys — names of every supported ConfigKeys variant.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"}}}},"LitActionClientConfigResponse":{"description":"GET /get_lit_action_client_config — effective ClientBuilder configuration values, including any chain-config overrides applied at startup.","type":"object","required":["async_timeout_ms","client_timeout_ms_buffer","max_code_length","max_console_log_length","max_fetch_count","max_get_keys_count","max_response_length","max_retries","memory_limit_mb","timeout_ms"],"properties":{"timeout_ms":{"type":"integer","format":"uint64","minimum":0.0},"async_timeout_ms":{"type":"integer","format":"uint64","minimum":0.0},"memory_limit_mb":{"type":"integer","format":"uint32","minimum":0.0},"max_code_length":{"type":"integer","format":"uint64","minimum":0.0},"max_response_length":{"type":"integer","format":"uint64","minimum":0.0},"max_console_log_length":{"type":"integer","format":"uint64","minimum":0.0},"max_fetch_count":{"type":"integer","format":"uint32","minimum":0.0},"max_get_keys_count":{"type":"integer","format":"uint32","minimum":0.0},"max_retries":{"type":"integer","format":"uint32","minimum":0.0},"client_timeout_ms_buffer":{"type":"integer","format":"uint64","minimum":0.0}}},"CacheMetadataResponse":{"description":"GET /cache_metadata — metadata for the cached action code correlated to the authenticated master account. Excludes the cached binaries themselves.","type":"object","required":["account_address","entries","entry_count","total_size_bytes"],"properties":{"account_address":{"description":"On-chain account wallet address the caller's key resolves to.","type":"string"},"entry_count":{"description":"Number of cached entries correlated to this account.","type":"integer","format":"uint64","minimum":0.0},"total_size_bytes":{"description":"Sum of `size_bytes` across the returned entries.","type":"integer","format":"uint64","minimum":0.0},"entries":{"description":"The cached entries, sorted by most recent execution first.","type":"array","items":{"$ref":"#/components/schemas/CacheEntryMetadataItem"}}}},"CacheEntryMetadataItem":{"description":"One cached action-code entry in a `GET /cache_metadata` response (CPL-351).\n\nDescribes the cached data only — never the code/binary itself.","type":"object","required":["created_at_ms","ipfs_id","last_run_at_ms","run_count","size_bytes"],"properties":{"ipfs_id":{"description":"IPFS id (cache key) of the cached action code.","type":"string"},"size_bytes":{"description":"Size of the cached code in bytes.","type":"integer","format":"uint64","minimum":0.0},"created_at_ms":{"description":"Unix-epoch milliseconds when the entry was first cached.","type":"integer","format":"uint64","minimum":0.0},"last_run_at_ms":{"description":"Unix-epoch milliseconds of the most recent execution.","type":"integer","format":"uint64","minimum":0.0},"run_count":{"description":"Number of executions recorded against this entry.","type":"integer","format":"uint64","minimum":0.0},"ttl_seconds":{"description":"Time-to-live of the entry, in seconds. `None` for the API-server IPFS cache, which is capacity-bounded (LRU) rather than time-expired.","type":"integer","format":"uint64","minimum":0.0,"nullable":true}}},"SupportedLanguagesResponse":{"description":"Returned by `/get_supported_languages` — the node's language capability surface (see `actions::languages`).","type":"object","required":["languages"],"properties":{"languages":{"type":"array","items":{"$ref":"#/components/schemas/LanguageFeature"}}}},"LanguageFeature":{"description":"One supported language, as advertised by `GET /get_supported_languages`.","type":"object","required":["display_name","execution_model","methods","name","runtimes"],"properties":{"name":{"description":"Stable id used in requests, e.g. \"python\", \"rust\", \"javascript\".","type":"string"},"display_name":{"description":"Human label, e.g. \"Python\".","type":"string"},"execution_model":{"description":"Underlying runner: \"deno\" (JS).","allOf":[{"$ref":"#/components/schemas/ExecutionModel"}]},"runtimes":{"description":"Provisionable runtime versions — each maps to an install recipe and a cache profile (NOT baked into the image). Multiple may coexist (e.g. 3.12 and 3.13). Empty for compiled/static languages.","type":"array","items":{"$ref":"#/components/schemas/LanguageRuntime"}},"methods":{"description":"Which methods this language accepts on this node.","type":"array","items":{"$ref":"#/components/schemas/ExecutionMethod"}}}},"ExecutionModel":{"type":"string","enum":["deno"]},"LanguageRuntime":{"type":"object","required":["id","is_default","prewarmed","version"],"properties":{"id":{"description":"Value clients pass as `runtime` and the manifest's `runtime` field, e.g. \"python3.13\". Selects an install recipe + cache profile.","type":"string"},"version":{"description":"Full version string, e.g. \"3.13.1\".","type":"string"},"is_default":{"description":"Chosen when the client omits `runtime`.","type":"boolean"},"prewarmed":{"description":"True once this profile's install layers are materialized in the runner's cache. Always false today.","type":"boolean"}}},"ExecutionMethod":{"oneOf":[{"description":"Pick language + runtime, send code; server desugars into a bundle.","type":"string","enum":["raw_script"]},{"description":"Code-only tar over the minimal base rootfs; runtime provisioned by the startup script's cached install commands (or a static binary).","type":"string","enum":["bundle"]},{"description":"Self-contained OCI image bringing its own runtime/interpreter. Node-gated; may be curated in prod.","type":"string","enum":["oci_bundle"]}]},"StripeConfigResponse":{"description":"GET /billing/stripe_config — returns the Stripe publishable key for Stripe.js.","type":"object","required":["publishable_key"],"properties":{"publishable_key":{"type":"string"}}},"BillingBalanceResponse":{"description":"GET /billing/balance — current credit balance for the authenticated API key.","type":"object","required":["balance_cents","balance_display"],"properties":{"balance_cents":{"description":"Balance in cents.  Negative means credits are available; zero means exhausted.","type":"integer","format":"int64"},"balance_display":{"description":"Human-readable, e.g. \"$5.00 credit\".","type":"string"}}},"CreatePaymentIntentResponse":{"description":"POST /billing/create_payment_intent — client secret for Stripe.js confirmCardPayment.","type":"object","required":["client_secret","payment_intent_id"],"properties":{"client_secret":{"type":"string"},"payment_intent_id":{"type":"string"}}},"CreatePaymentIntentRequest":{"description":"POST /billing/create_payment_intent","type":"object","required":["amount_cents"],"properties":{"amount_cents":{"description":"Amount to charge in US cents (minimum 500 = $5.00).","type":"integer","format":"int64"}}},"ConfirmPaymentRequest":{"description":"POST /billing/confirm_payment","type":"object","required":["payment_intent_id"],"properties":{"payment_intent_id":{"type":"string"}}},"VersionResponse":{"type":"object","required":["commit_version","name","submodule_versions","version"],"properties":{"name":{"type":"string"},"version":{"type":"string"},"commit_version":{"type":"string"},"submodule_versions":{"type":"array","items":{"type":"array","items":[{"type":"string"},{"type":"string"}],"maxItems":2,"minItems":2}}}},"SystemStatsResponse":{"description":"Returned by `/get_system_stats` — CVM memory usage and in-process cache statistics powering the monitor dapp's system dashboard.","type":"object","required":["caches","memory","runners"],"properties":{"memory":{"$ref":"#/components/schemas/MemoryStats"},"caches":{"type":"array","items":{"$ref":"#/components/schemas/CacheStats"}},"runners":{"type":"array","items":{"$ref":"#/components/schemas/RunnerInfo"}}}},"MemoryStats":{"description":"CVM-level memory figures from `/proc/meminfo` plus this process's resident set from `/proc/self/status`. Fields are `None` on platforms without procfs (e.g. local macOS development).","type":"object","properties":{"total_kb":{"type":"integer","format":"uint64","minimum":0.0,"nullable":true},"available_kb":{"type":"integer","format":"uint64","minimum":0.0,"nullable":true},"used_kb":{"type":"integer","format":"uint64","minimum":0.0,"nullable":true},"process_rss_kb":{"type":"integer","format":"uint64","minimum":0.0,"nullable":true}}},"CacheStats":{"description":"Entry statistics for one in-process cache.","type":"object","required":["description","entry_count","name"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"entry_count":{"type":"integer","format":"uint64","minimum":0.0},"approx_bytes":{"description":"Approximate bytes held, for caches built with a byte weigher. `None` when the cache only counts entries.","type":"integer","format":"uint64","minimum":0.0,"nullable":true}}},"RunnerInfo":{"description":"Presence of a Lit Action runner's Unix socket. `socket_present` means the runner container has been deployed and created its socket — it is not a liveness probe (`/health` covers reachability).","type":"object","required":["name","socket_path","socket_present"],"properties":{"name":{"type":"string"},"socket_path":{"type":"string"},"socket_present":{"type":"boolean"}}}}}}